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

182 阅读1分钟

题目描述:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

在这里插入图片描述 提示:

  • 链表中节点的数目在范围[0,100][0,100]
  • 0<=Node.val<=1000<=Node.val<=100

在这里插入图片描述

解释:

  • 一、创建一个虚拟头节点dummy指向head
  • 二、步骤一对应的就是dummy.next = b
  • 三、步骤二对应的就是a.next = b.next
  • 四、步骤三对应的就是b.next = a

注意:步骤二和三顺序不能互换,如果互换b.next指向a,再执行a.next = b.next,a就指向自己了

/**
 * 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 dummy = new ListNode(-1);
        dummy.next = head;
        ListNode p = dummy;

        while(p.next != null && p.next.next != null){
            ListNode a = p.next;
            ListNode b = p.next.next;

            p.next = b;
            a.next = b.next;
            b.next = a;
            p = a;
        }
        return dummy.next;
    }
}

此题AC 在这里插入图片描述