我正在用 java 练习链表编程问题,我有以下问题的有效解决方案,但无法理解它是如何工作的。
我在每一行旁边都评论了我认为应该发生的事情,但显然我还没有理解这些是如何工作的,有人可以解释我的评论在哪里错误以及这个解决方案是如何正确的。(在我的评论中,我使用 h 作为头部, s 表示慢等)
给定一个链表,交换每两个相邻节点并返回其头部。示例:给定 1->2->3->4,您应该将列表返回为 2->1->4->3。
public Node s(Node head) {
// 1(h)-2-3-4 passed in
// if only 1 node or null node return it
if (head == null || head.next == null) {
return head;
}
Node slow = head.next; // 1h-2s-3-4
head.next = head.next.next; // 1h-3-4
slow.next = head; // 2s-1h-3-4
head = slow; // 2s/h-1-3-4
Node parent = slow.next; // 1p-3-4
slow = slow.next.next; // 3s-4
while (slow != null && slow.next != null) {
Node temp = slow.next; // 4t-null
slow.next = slow.next.next; // 3s-null
temp.next = slow; // 4t-3s-null
parent.next = temp; // 1p-4-3
parent = parent.next.next; // 3p=null
slow = slow.next; // 4-null, loop ends cause next to slow is null
}
return head; // ( head = slow from earlier) 4-null
}
至尊宝的传说
白板的微信
哔哔one
相关分类