找链表的中间结点和倒数第k个结点(链表笔试题面试题)
一、问题
查找链表的中间节点
查找链表的倒数第k个结点
二、解决思路:快慢指针
找中间节点:快指针走两步,慢指针走一步
找倒数第k个结点:快指针走k步或k-1步,然后慢指针再开始走
三、代码实现(c语言)
1.找中间结点
sListNode*FindMidNode(sListNode*pHead){sListNode*slow=pHead,*fast=pHead;while(fast!=NULL&&fast->next!=NULL){slow=slow->next;fast=fast->next->next;}returnslow;
2.找倒数第k个结点
sListNode*FindKTailNode(sListNode*pHead,intk){assert(k>=0);sListNode*fast=pHead,*slow=pHead;while(--k)//快指针走k-1步{if(fast->next==NULL)returnNULL;fast=fast->next;}while(fast->next!=NULL){slow=slow->next;fast=fast->next;}returnslow;}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。