剑指offer14-链表中倒数第k个结点
题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路:有2方法。
第一种:找到数组的长度i,让指针从头开始走i-k步即可
第二种:设置两个指针指向头结点,让一个先走k步,然后两者再同时前进,当先出发的那个到达结尾时,后出发的那个所指的就是倒数第k个结点
代码:
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead==NULL||k==0) return NULL; ListNode* p = pListHead; ListNode* q = pListHead; int i=1; while(p->next!=NULL) { p=p->next; i++; } if(k>i) return NULL; while(i-k>0) { q=q->next; i--; } return q; } };