题目描述
输入一个链表,输出该链表中倒数第k个结点。
思想:
如{1,2,3,4,5,6} ,k=2,即输出倒数第二个元素5
在cnt小于k时只有p移动,并且最后移动到了元素值值为2,q还是指向头结点(元素值为1),这时p,q两指针的偏移量为1
之后p,q都在一起移动,p,q两指针的偏移量始终为1,当p指向最后一个元素时,q指向倒数第二个元素
编码思路:
定义两个指针p,q指向头结点,cnt作为计数工具初始化为0;
进入循环,循环运行条件为p指针不为空
如果计数的cnt小于k 则p指向其下一个元素
如果计数的cnt大于等于k,q指向其下一个元素,p指向其下一个元素
cnt++;
如果cnt大于等于k,就返回指针q,否则就是k比链表元素的总数还大,返回NULL
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };*/ class Solution { public: ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { ListNode* p,*q; p=q=pListHead; int cnt=0; while(p!=NULL){ if(cnt>=k){ q=q->next; } p=p->next; cnt++; } return (cnt>=k)?q:NULL; } };
本文介绍了一种高效查找链表中倒数第k个节点的算法,通过双指针技巧实现,适用于链表操作的学习和面试准备。

589

被折叠的 条评论
为什么被折叠?



