快慢指针,怎样快速获取链表的中间元素

有一个链表,怎样快速获取中间节点的元素。

方法1 遍历一下链表,确认长度,获取中间的节点元素,时间复杂度O(N)

方法2 设置两个指针,一个遍历p->nexr  一个 p->next->next,快慢指针的思想  时间复杂度为O(n/2)

 

代码:

 1 //腾讯面试题,获取一个单链表的中间位置
 2 Status GetMidNode(LinkList L,ElemType *e)
 3 {
 4     LinklList search,mid;
 5     mid =search=L;
 6     while (search->next !=Null)
 7        {
 8               //search移动的速度是mid的两倍 
 9               if (search->next ->next !=NULL)
10                  {
11                      search =search->next->next;
12                      mid = mid->next;
13               }
14             else 
15             {
16                 search=search->next ;
17             }
18        }
19        *e=mid->data;
20        return 0;
21  } 

 

posted @ 2016-05-15 00:53  MrPat  阅读(754)  评论(0编辑  收藏  举报