查找链表中间节点

我们可以弄两个指针都指向头节点,然后一个指针每次走一步,另一个每次走两步。

#include<stdio.h>
typedef struct link
{
  int a;
  struct link *next;
}link_t;
void main()
{
  link_t A = {1,NULL};
  link_t B = {2,NULL};
  link_t C = {3,NULL};
  link_t D = {4,NULL};
  link_t E = {5,NULL};
  A.next = &B;
  B.next = &C;
  C.next = &D;
  D.next = &E;
  link_t *h = &A;
  while(h != NULL)
  {
    printf(" %d",h -> a);
    h = h -> next;
  }
  puts("");
  puts("/////////////////////////");
  link_t *p1,*p2;
  p1 = p2 = &A; 
  while(p2 -> next != NULL && p2 -> next -> next != NULL)//这里要注意一下,p2 -> next != NULL是为了处理单数时,指针别指出去
  {
    p2 = p2 -> next -> next;
    p1 = p1 -> next;
  }
  printf("%d
",p1 -> a);
}
原文地址:https://www.cnblogs.com/zhaihongliangblogger/p/6194126.html