问题:求单链表倒数第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 }