美文网首页
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