反转链表:
问题描述:
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]示例 2:
输入:head = [1,2] 输出:[2,1]示例 3:
输入:head = [] 输出:[]
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {//定义了一个指向 null 的节点 prev,用于存储反转后的链表的前一个节点。最开始的时候,反转链表的前驱节点为 null,因为反转后的第一个节点会成为尾节点,其 next 指针应该指向 nullListNode prev = null;//定义了一个指向当前节点的指针 curr,最初指向原链表的头节点 head。这是用于遍历链表的指针ListNode curr = head;while(curr!= null){// 临时保存当前节点的下一个节点 next,因为在反转链表的过程中,当前节点的 next 指针会被修改,先存储它以免丢失后续的链表结构ListNode next = curr.next;// 将当前节点的 next 指针指向 prev,这一步完成了链表节点的反转操作。curr.next = prev;// 移动 prev 指针,使它指向当前节点。这样在下一次迭代时,当前节点会成为下一次迭代中处理的节点的前一个节点。prev = curr;// 移动 curr 指针,使它指向下一个节点(即之前存储的 next),准备处理下一个节点curr = next;}return prev;}
}