LeetCode 24. Swap Nodes in Pairs
程序员文章站
2022-07-14 08:26:15
...
题目
Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list’s nodes, only nodes itself may be changed.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
起码要有两个指针记录节点本身的位置,比如想要交换3,4:
这时肯定需要一个指针指向需要交换的节点3的上一个节点–2(pre所指的位置),这样才能跟后面的节点连上。
节点3 指向-> 节点5时;即:pre.next.next = p.next;
3,4的连接就断开了,此时节点4的位置也需要记录(p)
对应的交换过程为:
pre.next.next = p.next;
p.next = pre.next;
pre.next = p;
pre = p.next;
注意: 交换完后p的相对位置也改变了。
因为pre指向的是交换的两个节点的前一个,所以当交换1,2时,可以在一开始单独交换一次。
pre指向的是交换的两个节点的前一个节点,所以只要pre后面还有节点,就可以继续循环,继续交换。
**注意:**交换1,2后,头节点也变了。
交换1,2后,让pre指向下一次交换的前一个节点p = head.next
循环里需要首先让p指向下一个需要交换的两个节点。
p = pre.next;
if(p.next == null) { 如果pre后面之后一个节点那就不用交换了
break;
}else {
p = p.next;
}
pre继续指向下一个要交换的前一个节点,即pre = p.next
JAVA代码
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null) return head;
ListNode pre, p;
pre = head;
p = head.next;
pre.next = p.next;
p.next = pre;
head = p;
while(pre.next != null) {
p = pre.next;
if(p.next == null) {
break;
}else {
p = p.next;
}
pre.next.next = p.next;
p.next = pre.next;
pre.next = p;
pre = p.next;
}
return head;
}
下一篇: jira的部署
推荐阅读
-
Leetcode 1530. Number of Good Leaf Nodes Pairs (python)
-
Leetcode——24. Swap Nodes in Pairs
-
24. Swap Nodes in Pairs
-
LeetCode 24. Swap Nodes in Pairs
-
LeetCode 24. Swap Nodes in Pairs
-
24. Swap Nodes in Pairs
-
24. Swap Nodes in Pairs。
-
leetcode 24. Swap Nodes in Pairs 每两个结点反转一次
-
Swap Nodes in Pairs
-
Swap Nodes in Pairs