• 乘风破浪:LeetCode真题_024_Swap Nodes in Pairs


    乘风破浪:LeetCode真题_024_Swap Nodes in Pairs

    一、前言

       这次还是链表的操作,不过我们需要交换链表奇数和偶数位置上的节点,因此要怎么做呢?

    二、Swap Nodes in Pairs

    2.1 问题

         要求是不能修改节点的元素,并且使用的空间也是常数级别的,不能使用更高的内存空间。

    2.2 分析与解决

         通过分析我们可以使用简单的遍历算法,通过四个指针来解决,当然我们也可以使用递归算法来解答。

       使用正常遍历算法:

    public class Solution {
        /**
         * 题目大意
         * 给定一个单链表,成对交换两个相邻的结点。算法法应该做常量辅助空间,不能改结点的值,只能交换结点。
         *
         * 解题思路
         * 使用一个头结点root来辅助操作,对要进行交换的链表,每两个的位置进行交换,
         * 并且把交换后的结点接到root的链表上,直到所有的结点都处理完。
         */
        public ListNode swapPairs(ListNode head) {
            ListNode node = new ListNode(0); // 头结点
            node.next = head;
    
            // p指向新的链表的尾结点
            ListNode p = node;
            ListNode tmp;
    
            // 每两个进行操作
            while (p.next != null && p.next.next != null) {
                // 记录下一次要进行处理的位置
                tmp = p.next.next;
                // 下面三句完成两个结点交换
                p.next.next = tmp.next;
                tmp.next = p.next;
                p.next = tmp;
                // 指向返回链表的新的尾结点
                p = tmp.next;
            }
    
            head = node.next;
            node.next = null;
    
            return head;
        }
    }
    

         使用递归方法:

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public ListNode swapPairs(ListNode head) {
            if (head == null || head.next == null) return head;
            ListNode second = head.next;
            ListNode third = second.next;
            
            second.next = head;
            head.next = swapPairs(third);
            
            return second;
        }
    }
    

     

    三、总结

         遇到这样的问题,我们可以从多个角度去考虑,找到便于理解并且可行的算法。

  • 相关阅读:
    php7下安装event扩展
    ReactPHP── PHP版的Node.js(转)
    如何将python中的List转化成dictionary
    python3中的zip函数(转)
    python requests的content和text方法的区别(转)
    解决python3 UnicodeEncodeError: 'gbk' codec can't encode character 'xXX' in position XX(转)
    Python语言特性之3:@staticmethod和@classmethod
    Linux 按时间批量删除文件(删除N天前文件)
    简述 OAuth 2.0 的运作流程(转)
    基于jQuery8款超赞的评分插件
  • 原文地址:https://www.cnblogs.com/zyrblog/p/10221223.html
Copyright © 2020-2023  润新知