链表的反转操作是基本的链表操作之一。
快速记忆:
需要一个反转后的链表指针prev(用来返回最后的反转链表)
需要一个当前的链表指针curr
循环当前的链表curr,直到循环到终点
需要一个临时的指针,存储当前节点curr的下一个节点temp 将当前的节点的next指针指向prev prev指向curr curr指向temp
Java
public ListNode reverseList(ListNode head) {
ListNode curr = head;
ListNode prev = null;
while (curr != null) {
ListNode temp = curr.next;
curr.next = prev;
prev = curr;
curr = temp;
}
return prev;
}
为什么要上面这些步骤?
因为反转链表会调整next指针的方向,所以需要一个额外的prev存储反转后的链表
为什么要一个临时的temp?
因为curr的next指针调整之后,curr就丢失了信息,找不到下一个节点了,所以要存一下为什么要prev指向curr
因为原链表和反转后的链表,要一个一个节点的处理,所以要调整指针的移动