求单项链表的倒数第k个节点(c语言)

求单项链表的倒数第k个节点(只遍历一次)

单向链表求倒数第k个节点我们可以先遍历一遍找出链表的长度,再设置一个指针走(n-k)步可以找到倒数第k个节点。


但是,这需要遍历两次,如果只允许遍历一次我们就可以使用双指针。设置一个先指针和一个后指针,两个指针都指向头节点,先指针先向前走k步,之后两个指针一起向前移动,直到先指针遍历出最后一个节点值为null时,后指针指向的就是倒数第k个节点

代码c语言

typedef struct LNode{
  int data;
  struct LNode *next;
}

//带头节点   
int find (LNode * head, int k){
     LNode *p = head->next->next;
     LNode *pre = head->next;

     int i = 0;
     While(p){
         p=p->next;
         i++;
         if(i>k){
             pre = pre->next;
         }
     }
     if(pre == head)
         return -1;
     else
         return pre->data;
}


 

猜你喜欢

转载自blog.csdn.net/weixin_43537097/article/details/127808404