• LeetCode 24. 两两交换链表中的节点


    题目


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

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

    示例 1:

    输入:head = [1,2,3,4]
    输出:[2,1,4,3]
    

    示例 2:

    输入:head = []
    输出:[]
    

    示例 3:

    输入:head = [1]
    输出:[1]
    

    提示:

    • 链表中节点的数目在范围 [0, 100] 内
    • 0 <= Node.val <= 100

    思路

    这个思路其实就是两两交换,要熟悉链表的特性,它的每个节点就相当于一个指针,指向下一个节点。

    方法一:

    利用递归。

    交换第二节点的next节点指向递归头节点。

    第二节点的next节点指向第一节点,返回第二节点,这样第一节点的下一节点就为交换后的节点。

    最后第二节点的next节点指向第一节点,即为需要的交换后的node

    class Solution(object):
        def swapPairs(self, head):
            """
            :type head: ListNode
            :rtype: ListNode
            """
            if not head or not head.next:
                return  head
            temp1 = head
            temp2 = head.next
            temp1.next = self.swapPairs(temp2.next)
            temp2.next =temp1
            return temp2 
    

    方法二:

    利用迭代。

    这里记录一个大大比较牛的做法,将该类别的题目设一个条件key来trigger,本题是两两交换,target 设2,其他同理。

    思路很清晰,构造一个主node,一个临时node 来存取中间节点的变化。

    class Solution(object):
        def swapPairs(self, head):
            """
            :type head: ListNode
            :rtype: ListNode
            """
            l1 = ListNode(-1)
            target = 2
            p = l1
            count = 0
            while head and count < target:
                q = head
                head = head.next
                q.next = p.next
                p.next = q  #将首节点的val赋值给临时node p,下一次循环进来就可以与q两两交换
                count += 1
                if count == target: #target相等,意味着达到交换次数,临时node p赋值空(只保留一位节点)
                    while p.next:
                        p = p.next
                    count = 0
            return l1.next
    
  • 相关阅读:
    对象与内存控制1---实例变量和类变量
    数组与内存控制2--数组使用
    数组与内存控制1--数组初始化
    Java 三大特征之--多态
    简述Java面向对象三大特征:封装、继承、多态
    java程序初始化的顺序
    关于public static void main(String[] args)相关知识
    Java的优点
    前端面试攻略3------HTML和CSS部分
    前端面试攻略2------计算机网络部分
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/13947252.html
Copyright © 2020-2023  润新知