/**
* 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) {
if(head == null){
return head;
}
ListNode temp = new ListNode(head.val);
head = head.next;
while(head != null){
ListNode nxt = new ListNode(head.val);
nxt.next = temp;
temp = nxt;
head = head.next;
}
return temp;
}
}
要撤消链接列表, 这有效,但我不满意,我怎么能做得更好?说实话,这似乎是一个糟糕的解决方案,每个循环占用空间。
答案 0 :(得分:1)
Collections.reverse(List<?>)
如果不满意,请查看本课程中的其他方法
答案 1 :(得分:0)
是的,它不是创建和附加节点以反转链接列表的最佳解决方案。
请参阅http://algorithms.tutorialhorizon.com/reverse-a-linked-list/。有很好的解释。
答案 2 :(得分:0)
您可以使用递归
public void reverse(ListNode prev, ListNode currNode) {
if (currNode == null) {
return;
} else {
reverse(currNode, currNode.next);
currNode.next = prev;
}
}
现在,您可以致电reverse(null, headNode)
将其撤消