关于链表中的引用
来源:5-2 测试自己的Leetcode链表代码
慕神7448648
2020-07-09
class Solution3 {
public ListNode removeElements(ListNode head, int val) {
ListNode dummyHead = new ListNode(-1);
dummyHead.next = head;
ListNode prev = dummyHead;
while(prev.next != null){
if(prev.next.val == val)
prev.next = prev.next.next;
else
prev = prev.next;
}
return dummyHead.next;
}
}
老师你好:
请教一下这里的引用怎么理解?首先创建了dummyHead 这个引用指向了虚拟头节点。ListNode prev = dummyHead;这个代码我理解的意思是将引用prev和引用dummyHead都指向了虚拟头节点。之后遍历链表的时候使用的是引用prev。prev = prev.next;这个代码将引用prev给覆盖了,这时候引用prev和引用dummyHead所指向的对象应该是不同的。为什么最后的返回时dummyHead.next,而在程序中操作的却是引用prev?
写回答
2回答
-
qq_XR_1
2021-11-16
因为 dummyHead.next 始终指向链表的头结点,而 prev 在 return 的时候,指针已经指向了链表的尾结点。你需要返回的是从头结点开始遍历的一整个链表,所以得返回 dummyHead.next,同时用 prev 来操作。
00 -
liuyubobobo
2020-07-09
你前面所有的描述都是正确的,我没有理解你的疑问点。因为 dummyHead 一直指向的是链表的第一个节点。
或者说,你觉得应该返回谁?
042020-07-10
相似问题