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

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

示例:

  给定 1->2->3->4, 你应该返回 2->1->4->3.

此处我们需要交换的两个节点的前一个节点pre,需要交换的两个节点mid、next,两个节点的后一个节点third。
首先将pre的next指向next节点,next节点的next指向mid,mid的next指向third,最后让mid成为下一轮循环的pre即可。
请输入图片描述

解法如下:

/**
* Definition for singly-linked list.
* public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode pre = new ListNode(-1);
        pre.next = head;

        ListNode a = pre;
        a.next = head;
        while(a.next!=null&&a.next.next!=null){
            ListNode mid = a.next;
            ListNode next = mid.next;
            ListNode tir = next.next;

            a.next = next;
            next.next = mid;
            mid.next = tir;
            a = mid;
        }
        return pre.next;
    }
}
Last modification:April 30th, 2019 at 04:08 am
大家一起分享知识,分享快乐