查找链表中间节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找链表中间节点相关的知识,希望对你有一定的参考价值。

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

#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\n",p1 -> a);
}

以上是关于查找链表中间节点的主要内容,如果未能解决你的问题,请参考以下文章

[算法]删除链表的中间节点

线性表技巧之Note003-寻找链表的中间节点

算法总结之 删除链表的中间节点和a/b处的节点(链表中间节点的重要思想)

删除链表的中间节点和a/b处的节点

链表问题----删除链表的中间节点和a/b处的节点

剑指offer:链表的中间节点