美文网首页
LeetCode_24 两两交换链表中的节点(链表题)

LeetCode_24 两两交换链表中的节点(链表题)

作者: monkey01 | 来源:发表于2018-10-30 17:30 被阅读25次

题目地址:https://leetcode-cn.com/problems/swap-nodes-in-pairs/

题目:

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

示例:

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

说明:

  • 你的算法只能使用常数的额外空间。
  • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

试题分析:

这道题看描述很简单,但是真正动手写起来还是有些难度的,因为涉及到多指针的操作,因为涉及到链表上节点的两两交换,所以会涉及到3个节点的操作,当前节点、前置节点、前置的前置节点。算法思路就是顺序遍历链表节点,两两交换位置,交换完成后需要进行指针位置移动,做的过程中最好先画图搞清楚指针交换的过程再动手写代码。

代码:

public ListNode swapPairs2(ListNode head) {

        if(head==null || head.next==null){
            return head;
        }
        //涉及到3个节点操作,前置节点、前置前置节点、当前节点
        ListNode cur = head.next;
        ListNode prev = head;
        ListNode prevPrev = null;
        head = head.next;
        while(prev!=null && cur!=null){
            //当前交换节点非空则交换cur和prev
            prev.next = cur.next;
            cur.next = prev;
            //记录前置前置节点为当次排序第二个节点,用于下次交换
            prevPrev = prev;
            if(prev.next!=null && prev.next.next!=null) {
                prev = prev.next;
                cur = prev.next;
                prevPrev.next = cur;
            }else {
                break;
            }
        }

        return head;
    }

源码路径:com.monkey01.linkedlist.SwapNodesInPairs_24

配套测试代码路径:test目录com.monkey01.linkedlist.SwapNodesInPairs_24Test

https://github.com/feiweiwei/LeetCode4Java.git

相关文章

网友评论

      本文标题:LeetCode_24 两两交换链表中的节点(链表题)

      本文链接:https://www.haomeiwen.com/subject/oxtntqtx.html