
1. 链表的当前结构
- 每个方框代表一个节点,每个节点包含两个部分:
- 左侧的数字:节点存储的值,例如
45、34等。 - 右侧的地址(如
0x90):表示该节点next指针指向的下一个节点的内存地址。
- 左侧的数字:节点存储的值,例如
- 例子中,链表从右向左依次连接,形成
45 -> 34 -> 23 -> 12。
初始结构
- 链表的头节点为
12,head指向12。 cur:当前节点,指向某个正在操作的节点。
2. 代码逻辑解读
java
head.next = null; // 第一步
cur.next = head;
head = cur;
cur = curN;
代码功能
-
head.next = null;- 将原链表的
head的next置为null,这是反转的关键一步,因为反转后,原来的头节点将变成尾节点。
- 将原链表的
-
cur.next = head;- 将当前节点
cur的next指向head。 - 这样,当前节点
cur插入到新链表的头部。
- 将当前节点
-
head = cur;- 更新头节点为
cur,当前节点变成了新链表的头部。
- 更新头节点为
-
cur = curN;- 将
cur更新为下一个节点curN,继续处理链表的剩余部分。
- 将
3. 图示解析
-
初始状态 :

-
完整代码:
javapublic ListNode reverseList(ListNode head) { ListNode cur = head; // 当前节点 ListNode curN; // 下一个节点 head = null; // 初始化新链表的头部为空 while (cur != null) { curN = cur.next; // 保存下一个节点的位置 cur.next = head; // 当前节点指向新链表的头部 head = cur; // 更新新链表的头部 cur = curN; // 移动到下一个节点 } return head; }5. 反转链表的特点
-
时间复杂度 :
O(n),每个节点只处理一次。 -
空间复杂度 :
O(1),只使用了固定的指针变量cur和curN。 -
应用场景 :
- 需要逆序访问链表时(如回文检查)。
- 数据倒序排列。