如何实现链表的反转
原本的链表:
反转后:
思路:
我们在反转链表的时候,原本每一个结点的next指向其后继结点,现在调整指针方向,让其next指向前面一个结点。但是这样有一个问题,以u,v,w为例,当v指向u以后,就没有指针指向w了,就无法遍历到w了,所以我们在调整v的指针之前,先把w存储起来。然后找到反转链表的头结点,即原本链表中next指针为空的结点。
代码实现:
public static Node reverseChain(Node head) {
Node reverseHead = null; //反转后的链表头
Node preNode = null; //当前结点的前一个结点
Node curNode = head; //当前结点
while(curNode != null) {
Node nextNode = curNode.next; //调整当前结点的指针指向前,先将当前结点的后继结点存储起来
if(nextNode == null) {
reverseHead = curNode;
}
curNode.next = preNode;
preNode = curNode;
curNode = nextNode;
}
return reverseHead;
}