找链表的中间结点和倒数第k个结点(链表笔试题面试题)

来源:互联网 发布:mac运行速度变慢 编辑:程序博客网 时间:2024/06/08 09:23

一、问题

  1. 查找链表的中间节点

  2. 查找链表的倒数第k个结点

二、解决思路:快慢指针

  1. 找中间节点:快指针走两步,慢指针走一步

  2. 找倒数第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;}


0 0
原创粉丝点击