1. question: 两两交换链表中的节点(中等)
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/swap-nodes-in-pairs
示例 1:
1 2
| 输入:head = [1,2,3,4] 输出:[2,1,4,3]
|
示例 2:
示例 3:
提示:
1 2
| 链表中节点的数目在范围 [0, 100] 内 0 <= Node.val <= 100
|
2. answers
这道题也没什么可说的,就是按照步骤来就行。注意,需要判断一下当前是否需要交换节点(即保证当前所在节点以及下一个节点均不是null)。注意指针的移动顺序,代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| public class Solution_0053 {
public static ListNode swapPairs(ListNode head) {
if(head == null || head.next == null) return head;
ListNode newHead = new ListNode(0, head);
ListNode second = newHead; ListNode first = second.next;
while(first.next != null) {
second.next = first.next;
first.next = first.next.next;
second.next.next = first;
second = first; first = first.next;
if(first == null) break; }
return newHead.next; }
public static void main(String[] args) { System.out.println();
ListNode ln4 = new ListNode(1);
ListNode result = swapPairs(ln4);
while(result != null) {
System.out.println(result.val);
result = result.next; } } }
|
3. 备注
参考力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com),代码随想录 (programmercarl.com)。