如何解决重新排列LastN - Java
鉴于以下解决方案,我很难理解链表的前半部分是如何连接到后端的。我已经逻辑地完成了它,但无法理解最后 3 行的引用。
给定一个整数单链表 l
和一个非负整数 n
,将最后 n
个列表节点移动到链表的开头。
例如,对于输入 l = [1,2,3,4,5]
和 n = 3
,rearrangeLastN(l,n)
的输出应该是
[3,5,1,2]
。
// Singly-linked lists are already defined with this interface:
// class ListNode<T> {
// ListNode(T x) {
// value = x;
// }
// T value;
// ListNode<T> next;
// }
//
ListNode<Integer> rearrangeLastN(ListNode<Integer> l,int n) {
if (l == null || n == 0) return l;
ListNode<Integer> fast = l; //1,5
ListNode<Integer> slow = l; //1,5
while(n > 0 && fast != null) { //3->2->1
fast = fast.next; //4->5
n--; //1
}
if (n >= 0 && fast == null) return l;
while (fast.next != null) { //1 Interation (4->5->null)
slow = slow.next; //2->3->4->5
fast = fast.next; //5
}
ListNode newHead = slow.next; //3->4->5
slow.next = null;
fast.next = l;
return newHead;
}
解决方法
最初:
1 -> 2 -> 3 -> 4 -> 5 -> null
^
l
fast
slow
在第一个 while
循环之后:
1 -> 2 -> 3 -> 4 -> 5 -> null
^ ^
l
fast
slow
在第二个 while
循环之后:
1 -> 2 -> 3 -> 4 -> 5 -> null
^ ^ ^
l
fast
slow
在行 ListNode newHead = slow.next;
之后:
1 -> 2 -> 3 -> 4 -> 5 -> null
^ ^ ^ ^
l
fast
slow newHead
在行 slow.next = null;
之后:
1 -> 2 -> null 3 -> 4 -> 5 -> null
^ ^ ^ ^
l
fast
slow newHead
在行 fast.next = l;
之后:
┌────────────────────────────────┐
└> 1 -> 2 -> null 3 -> 4 -> 5 ┘
^ ^ ^ ^
l
fast
slow newHead
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。