zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    Taglib笔记摘自http://tech.acnow.net/Html/Program/Java/200204/10/092611588.shtml
    Subversion安装手记
    java 数组排序
    JAVA 反编译
    开发EJB
    HTML 4.0 语 法 教 学 转载http://chinese.allproducts.com.tw/GB/html/#t1
    javaCollectionslist
    Ruby on Rack #1 与Rack的第一次亲密接触
    Ubuntu 安装 ruby on rails [转]来源:Ubuntu社区 作者:承古韵
    收集整理的对#!bin/sh的认识
  • 原文地址:https://www.cnblogs.com/xiaoqiangink/p/13947252.html
Copyright © 2011-2022 走看看