一、问题
查找链表的中间节点
查找链表的倒数第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;
}
return slow;
2.找倒数第k个结点
sListNode* FindKTailNode(sListNode* pHead,int k)
{
assert(k >= 0);
sListNode* fast = pHead, *slow = pHead;
while(--k) //快指针走k-1步
{
if(fast->next == NULL)
return NULL;
fast = fast->next;
}
while(fast->next != NULL)
{
slow = slow->next;
fast = fast->next;
}
return slow;
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。