算法探索_两两交换链表中的节点

问题描述:

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

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

示例:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs

解决思路:

递归,交换,指针后移。 移的时候要主意除了第一次后移,以后的后移都是移两步。因为第一次后移resultHead本身指向了一个值,而往后的移动,都是.next指向第一个值

    /*
     *作者:赵星海
     *时间:2020/8/31 16:05
     *用途:两两交换链表中的节点
     */
    ListNode resultHead = null;//结果头
    ListNode result = null;//结果头
    public ListNode swapPairs(ListNode head) {
        if (head == null) return null;
        if (result == null && head.next == null) {
            return head;
        }
        //1.递归   2.三步步交换
        if (head.next != null) {
            ListNode two = head.next;
            head.next = head.next.next;
            two.next = head;
            if (result == null) {
                result = two;
                resultHead = result;
                result = result.next;
            } else {
                result.next = two;
                result = result.next.next;
            }
            swapPairs(two.next.next);
        }
        return resultHead;
    }

leetCode提交结果:

猜你喜欢

转载自blog.csdn.net/qq_39731011/article/details/108334755