正常单链表
现在定义三个指针分别如下:
如果要反转链表的话就应该进行如下操作:
随着指针移动
直到Cur指向空的时候结束遍历
public static Node ReverseList(Node head)
{
if (head == null)
{
return;
}
Node prevNode = null;
Node NextNode = null;
Node currentNode = head.next;
while(currentNode != null)
{
// 当前节点的后一个节点
NextNode = currentNode.Next;
currentNode.Next = prevNode;
// 将前一个节点指向当前节点
prevNode = currentNode;
// 将当前节点指向后一个节点
currentNode = nextNode;
}
return head;
}
分析:
首先需要注意的是遍历链表时,需要处理三个相邻的节点将第二个指针指向了第一个节点,一旦调整了指针的方向,链表就断开了,因为已经没有链表指向第三个节点,所以为了避免链表的断开,首先需要做的是将后面的先保存起来,就是我们下面的第一步操作
首先定义两个空指针,preNode和NextNode,
在定义一个头结点,另Cur指针指向当前节点
Cur指针不为空的情况下
第一步:NextNode指向当前节点Cur的下一个
第二部:反转的话就令当前节点指向他的前面的节点Pre
第三部:(指针都往后移动)pre向后移
第四部:(指针向后移动) Cur向后移