Leetcode题库——24.两两交换链表中的节点
@author: ZZQ
@software: PyCharm
@file: swapPairs.py
@time: 2018/10/20 19:49
说明:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:
你的算法只能使用常数的额外空间。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:
四个节点,分别记录当前需要进行交换的两个节点(first, second),以及这俩个节点的前后节点(pre, post)
然后每次只针对这四个节点进行交换即可。
注意考虑当输入是空节点,一个节点,两个节点,三个节点以及节点个数为奇数的情况。
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None
class Solution(object):
    def __init__(self):
        pass
    def exchange(self, pre, first, second, post):
        first.next = None
        second.next = None
        first.next = post
        second.next = first
        pre.next = second
    def swapPairs(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if head is None or head.next is None:
            return head
        pre = ListNode(0)
        pre.next = head
        first = head
        second = head.next
        post = second.next
        p = pre
        while True:
            self.exchange(pre, first, second, post)
            pre = pre.next.next
            first = pre.next
            if first is None:
                break
            second = pre.next.next
            if second is None:
                break
            post = post.next.next
            if post is None:
                self.exchange(pre, first, second, post)
                break
        return p.next
if __name__ == "__main__":
    answer = Solution()
    l1 = ListNode(1)
    p1 = ListNode(2)
    p2 = ListNode(3)
    p3 = ListNode(4)
    p4 = ListNode(5)
    p5 = ListNode(6)
    l1.next = p1
    p1.next = p2
    p2.next = p3
    p3.next = p4
    p4.next = p5
    l2 = answer.swapPairs(l1)
    while l2 is not None:
        print l2.val
        l2 = l2.next
												
											Leetcode题库——24.两两交换链表中的节点的更多相关文章
- Java实现 LeetCode 24 两两交换链表中的节点
		
24. 两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3-&g ...
 - leetcode 24. 两两交换链表中的节点 及 25. K 个一组翻转链表
		
24. 两两交换链表中的节点 问题描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2-> ...
 - 【LeetCode】24.两两交换链表中的节点
		
24.两两交换链表中的节点 知识点:链表 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 示例 1 ...
 - LeetCode 24. 两两交换链表中的节点(Swap Nodes in Pairs)
		
题目描述 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3. 说明: 你的算法只能 ...
 - NO.24两两交换链表中的节点
		
NO.24两两交换链表中的节点 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例:给定 1->2->3-&g ...
 - LeetCode-024-两两交换链表中的节点
		
两两交换链表中的节点 题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例说明请见LeetCode官网. 来源:力 ...
 - lintcode-451-两两交换链表中的节点
		
451-两两交换链表中的节点 给一个链表,两两交换其中的节点,然后返回交换后的链表. 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3. ...
 - 【Leetcode链表】两两交换链表中的节点(24)
		
题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2- ...
 - leetcode第24题:两两交换链表中的节点
		
通过分析,这属于数据结构类型题目,但涉及到多次交换,也需要算法知识. 首先,我想的是,将链表中节点相互交换. class Solution: def swapPairs(self, head: Lis ...
 
随机推荐
- MongoDB查找条件
			
1. 关系运算符 $eq 等于 $lt 小于 $lte 小于等于 $gt 大于 $gte 大于等于 $in 在范围内 //查询名字为“小明”和“小刚”的 $condition = [ ' ...
 - Delphi - SPcomm 控件使用
			
Com口函数 自动获取Com口,函数列表 procedure EnumComPorts(Ports: TStrings); //自动获取com口函数 var KeyHandle: HKEY; ErrC ...
 - python抠图与pip install PIL报错
			
窗口命令pip install PIL(python3.6+selenium——2.53.1+pycharm) from PIL import Image from selenium import w ...
 - linux 虚拟机 磁盘空间压缩
			
/usr/bin/vmware-toolbox-cmd disk list /usr/bin/vmware-toolbox-cmd disk shrink / init 0
 - 【转载】COM 组件设计与应用(十七)——持续性
			
原文:http://vckbase.com/index.php/wv/1264.html 一.前言 我们写程序,经常需要实现这样的需求: 例一.程序运行产生一个窗口,用户关闭的时候需要记录窗口的位置, ...
 - 22-[jQuery]-选择器, js jQuery对象转换
			
1.基础选择器 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
 - Textarea的readonly问题
			
textarea的readonly属性,不能用setAttribute方法设置,只能类似textarea.readOnly = true|false的写法. 原因: setAttribute只能设置一 ...
 - Pyhton配置CGI
			
目录 CGI配置(Mac版) 添加CGI python文件测试 CGI--common gateway interface 通用网关接口的意思,本文通过python的CGI来整体了解下CGI的配置和使 ...
 - PHP 用户密码加密函数password_hash
			
传统的用户名和密码都采用加盐的方式存储加密信息,盐值也需要存储. 自PHP5.5.0之后,新增加了密码散列算法函数(password_hash),password_hash() 使用足够强度的单向散列 ...
 - Unity 自定义编辑器窗口 画线
			
最近在学习状态机, 想自己实现一个可视化编辑器, 需要将多个状态之间用线条连接起来, 效果如下: 代码如下: Material m;Vector2 start;Vector2 end;Color co ...