Java数据结构 (链表反转(LinkedList----Leetcode206))
1. 链表的当前结构
- 每个方框代表一个节点,每个节点包含两个部分:
- 左侧的数字:节点存储的值,例如
45
、34
等。 - 右侧的地址(如
0x90
):表示该节点next
指针指向的下一个节点的内存地址。
- 左侧的数字:节点存储的值,例如
- 例子中,链表从右向左依次连接,形成
45 -> 34 -> 23 -> 12
。
初始结构
- 链表的头节点为
12
,head
指向12
。 cur
:当前节点,指向某个正在操作的节点。
2. 代码逻辑解读
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. 图示解析
-
初始状态:
-
完整代码:
public 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
。 - 应用场景:
- 需要逆序访问链表时(如回文检查)。
- 数据倒序排列。
原文地址:https://blog.csdn.net/2301_80176774/article/details/145291150
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!