【C语言】查找链表的中间节点及倒数第K个节点

来源:互联网 发布:lpl韩国外援知乎 编辑:程序博客网 时间:2024/05/22 19:02
//找链表的中间节点Node *MidNode(PLinkList plist){           PLinkList p1,p2;           //若链表为空,直接返回           if(plist ==NULL)          {                   printf( "NULL\n");                    return ;          }          /*利用快慢指针,快指针一次走两步,慢指针一次走一步,两个指针同时开始走,当快指针                             走向链表尾部时,慢指针则刚好走到链表的一半,即指向中间节点*/          p1=p2= plist;           while(p1!=NULL &&p1->next!=NULL)          {                   p1=p1->next->next;                   p2=p2->next;          }           return p2;}//找倒数第K个节点Node *FindKNode(PLinkList plist, int k ){           PLinkList fast,slow;           assert(plist );          fast=slow= plist;           if(plist ==NULL)          {                    return NULL ;          }           //     快指针先走K-1步           while(--k &&fast->next!=NULL)          {                   fast=fast->next;          }           if(k ==0) //当K=0的条件下,两个指针同时开始走          {                    //当快指针走向表尾时,慢指针就指向倒数第K个节点                    while(fast->next!=NULL )                   {                             fast=fast->next;                             slow=slow->next;                   }                    return slow;          }           return NULL ;}

0 0
原创粉丝点击