链表的逆序

来源:互联网 发布:中日互译软件 编辑:程序博客网 时间:2024/05/22 01:53

单链表的逆序
我们,来看单链表的逆序这个问题。我们应该知道对于空链表或者只有一个节点的链表是不需要逆序的。我们应该首先判断一下这个问题。然后,接着我们维护三个指针分别指向链表的第一第二第三个节点,就是p1,p2,p3;
首先,我们将链表断开就是将p1的next赋空,然后我们开始循环的做一件事情,就是把p2的next赋为p1,然后我们判断p3是不是空(就是如果最后两个节点),如果不是空,我们p2赋值给p1就是把p1向后移动了一个位置,接着我们移动p2,p3就好了,最后我们将头指针指向p2就好了。下面看代码。
PNODE reverse( PNODE *phead ){PNODE p1,p2,p3;if(NULL == *phead || NULL == (*phead)->next ){return *phead;}p1 = *phead;p2 = p1->next;p3 = p2->next;p1 ->next = NULL;while( 1 ){p2->next = p1;if( NULL == p3 ){break;}p1 = p2;p2 = p3;p3 = p3->next;}*phead = p2;return *phead;}

0 0