Skip to content

Latest commit

 

History

History
71 lines (58 loc) · 1.45 KB

20200526-两两交换链表中的节点.md

File metadata and controls

71 lines (58 loc) · 1.45 KB

每天一道leetCode

信息卡片

题目描述

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

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

示例:

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

参考答案

非递归

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode pre = dummy;
        ListNode left = head;
        while(left != null && left.next != null) {
            ListNode right = left.next;
            left.next = right.next;
            right.next = left;
            pre.next = right;
            pre = left;
            left = left.next;
        }
        return dummy.next;
    }
}

递归

class Solution {
    public ListNode swapPairs(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        ListNode next = head.next;
        head.next = swapPairs(next.next);
        next.next = head;
        return next;
    }
}