我正在做这个leetcode问题,我不明白为什么这个解决方案不起作用。它似乎只是返回头元素。谢谢
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode reverseList(ListNode head) {
ListNode curr = null;
ListNode lst = null;
while (head != null)
{
curr = head;
curr.next = lst;
lst = curr;
head = head.next;
}
return curr;
}
}
答案 0 :(得分:1)
其他答案在解释问题方面做得很好。为了解决这个问题,我想你在循环中需要的就是:
lst = curr;
curr = head;
head = head.next;
curr.next = lst;
这将遍历列表并反转指针。
这就是你要找的东西吗?
所以完整的代码:
public class Solution {
public ListNode reverseList(ListNode head) {
ListNode curr = null;
ListNode lst = null;
while (head != null)
{
lst = curr;
curr = head;
head = head.next;
curr.next = lst;
}
return curr;
}
}
答案 1 :(得分:0)
我认为这是因为当您设置curr = head;
时,您将curr
设置为对head
的引用。因此,当您设置head = head.next
时,它将head
设置为null并结束循环。
答案 2 :(得分:0)
curr = head;
以上行存储head
变量中curr
对象的引用。
curr.next = lst;
现在这会使head.next
= null
,因为lst
最初是null
而curr
持有head
对象的引用。
lst = curr;
您正在变量lst
以引用实际为curr
的{{1}}。
head
现在如前所述,head = head.next;
为head.next
,因此循环终止。 null
指向curr
。您已修改原始列表,该列表仅包含原始列表的头部。
答案 3 :(得分:0)
在java中了解一下java中的引用和对象。 Java总是传递引用的副本。所以,当你这样做时,
curr = head;
curr和head指向同一个对象。当你这样做时,
curr.next = lst;
curr.next和head.next都开始指向null(在null中为lst)。 然后你下次循环休息。
试试这个解决方案它会起作用。
public class Solution {
public ListNode reverseList(ListNode head) {
ListNode nxt = null;
ListNode lst = null;
while (head != null)
{
nxt = head.next;
head.next = lst;
lst = head;
head = nxt;
}
return lst;
}
}