单链表的逆置(注:本代码没有头结点)
1.首先按照正常顺序 p1 , p2 ,p3
2.然后在p2 -> next = p1;的时候已经实现第一步逆转(这个时候p2的next已经指向了p1)
3.然后在依次将指针右移 p1 = p2;p2 = p3;(给本人理解:地址的赋值是指向,和值传递不同)
4.这样原来的首节点已经是末结点了,把它的next指针置空作为结尾。
5.把移动到最右的p1作为首节点返回。
//链表的就地逆序
Linklist reverseList(Linklist phead)
{
Linklist p1,p2,p3;
p1 = phead; // 这里指的是没有头结点,如果有头结点,那么应该是p1 = phead ->next;
p2 = p1 ->next;
while(p2) // 这里最后p2要挪到最后,所以以它为终止条件
{
p3 = p2 ->next; // 这一步是保证指针右移的关键
p2 ->next = p1; // 这里是在每一步都在向左指
p1 = p2;
p2 = p3;
}
phead ->next = NULL; // 设置为末结点
phead = p1;
return phead;
}
<