求单链表倒数第m个结点

问题:求单链表倒数第m个结点,要求不准求链表的长度,也不许对链表进行逆转

解:设置两个指针p和q,p、q指向第一个结点。让p先移动到链表的第m个结点,然后p和q同时向后移动,直到p首先到达尾结点。此时,q结点落后p (m-1)个结点,q所指向的结点就是单链表的倒数第m个结点。

算法实现:

 1 linkNode *searchLinkM(linkNode *link,int m)
 2 {
 3 linkNode *p=link->next;
 4 if(p!=NULL&m>0)
 5 {
 6 for(int i=1;i<m;i++)
 7 {
 8 p=p->next;
 9 if(p==NULL)
10 {
11 cout<<"该链表没有倒数第m个结点"<<edl;
12 return NULL;
13 }
14 }
15 linkNode *q=link->next;
16 while(p->next!=NULL)
17 {
18 p=p->next;
19 q=q->next;
20 }
21 return q;
22 }

 

posted @ 2016-10-28 17:24  锅里煮水  阅读(167)  评论(0编辑  收藏  举报