切换主题
字数
1217 字
阅读时间
5 分钟
![[2024-10-19 00-45-05.mkv]] 我有如下结论://current 和 current.next 完全没有关系, 一个是指的指针变量引用的节点是谁(指代了某个链表的节点), 另一个是指针指向的对象(链表节点)的链表地址属性是谁. 对吗
是的,你的理解基本是正确的。让我详细解释一下这个过程。
在代码里:
current
是一个指向当前节点的指针变量。它指向链表中的一个ListNode
,即它引用了某个链表的节点。current.next
是current
指向的那个节点的下一个节点的引用,也就是说,它是这个节点的链表属性,用来指向下一个节点。
具体分析:
current
是指针变量:current
是一个引用,它可以指向链表中的任何节点。例如,current = head
表示current
指向链表的头节点。- 在每次循环中,
current
会更新为下一个节点,最终遍历整个链表。
current.next
是指向的节点的next
属性:current.next
不是指向current
本身,而是current
所指的链表节点的next
属性,它指向链表中的下一个节点。- 通过
current.next = prev
,你改变了current
所指节点的next
指针,使它不再指向原来的下一个节点,而是指向了前一个节点(实现链表反转的关键一步)。
对比:
current
:这个变量引用的是链表中的某个节点。通过改变current
,你可以让它指向链表中的不同节点。current.next
:这是current
所指向的节点的属性,它表示当前节点指向的下一个节点。
结论:
current
是一个变量,引用了某个链表节点。current.next
是current
所指的节点的属性,它指向链表中的下一个节点。- 它们确实是不同的概念:一个是指针变量,另一个是节点的属性(指向下一个节点的引用)。
因此,你的结论是对的:current
和 current.next
没有直接的关系,一个是指向某个节点的指针,另一个是指向该节点的下一个节点的指针。
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
ts
function reverseList(head: ListNode | null): ListNode | null {
let prev: ListNode | null = null;
let current: ListNode | null = head;
while (current !== null) {
const nextTemp: ListNode | null = current.next; // 保存当前节点的下一个节点
current.next = prev; // 反转当前节点的指针
prev = current; // 将 prev 移动到当前节点
current = nextTemp; // 移动到下一个节点
}
return prev; // 返回新的头节点
}
写在前面: 我清晰记得,以前在数据结构课上,老师和我们说:涉及到链表的操作,一定要在纸上把过程先画出来,再写程序。
现在想想,这句话简直是真理啊!
好理解的双指针 定义两个指针: pre 和 cur ;pre 在前 cur 在后。 每次让 pre 的 next 指向 cur ,实现一次局部反转 局部反转完成之后,pre 和 cur 同时往前移动一个位置 循环上述过程,直至 pre 到达链表尾部
作者:路漫漫我不畏 链接:https://leetcode.cn/problems/reverse-linked-list/solutions/99711/fan-zhuan-lian-biao-shuang-zhi-zhen-di-gui-yao-mo-/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在这个函数中,以下是对变量的分类:
对象:
head
:表示链表的头节点,是一个ListNode
对象。current
、prev
、nextTemp
:这些也是ListNode
对象(或null
),分别用于操作链表节点。
引用:
current
、prev
和nextTemp
变量是对ListNode
对象的引用。它们存储的是指向具体节点的地址,而不是节点的实际数据。
在JavaScript(或TypeScript)中,对象是通过引用传递的,所以对 current
、prev
和 nextTemp
的操作实际上是在操作它们所指向的对象。
这道题使用了三个指针:
prev
:用于保存已反转部分的最后一个节点。current
:用于遍历原链表的当前节点。nextTemp
:用于临时保存下一个节点,以便在反转指针后仍能继续遍历。
这三个指针协同工作,完成链表的反转。
贡献者
sunchengzhi