24. 两两交换链表中的节点

24. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

 

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]

示例 2:

输入:head = []
输出:[]

示例 3:

输入:head = [1]
输出:[1]

提示:

  • 链表中节点的数目在范围 [0, 100]
  • 0 <= Node.val <= 100
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
  public ListNode swapPairs(ListNode head) {

    ListNode dummyNode = new ListNode(0);
    dummyNode.next = head;
    ListNode prev = dummyNode;

    while (head != null && head.next != null) {
        // 提前保存第三个位置的节点
        ListNode temp = head.next.next;
        // 更改指向
        prev.next = head.next;
        head.next.next = head;
        head.next = temp;
        // 步长为2,进行迭代更替
        prev = head;                    
        head = head.next;              
    }
    return dummyNode.next;
  }
}

 

posted on 2022-11-08 19:55  HHHuskie  阅读(15)  评论(0编辑  收藏  举报

导航