LintCode 511 [Swap Two Nodes in Linked List]

原题

给你一个链表以及两个权值v1和v2,交换链表中权值为v1和v2的这两个节点。保证链表中节点权值各不相同,如果没有找到对应节点,那么什么也不用做。

解题思路

  • 基础的链表操作,写一个helper函数,根据head和value找出和value相等的节点和prev节点
  • 比如给出3->4->1->5->Null 和 1 返回Node(4)和Node(1)
  • 注意边界情况,如果v1=4, v2=1 那么current1和pre2重合,要特殊考虑

完整代码

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # @param {ListNode} head, a ListNode
    # @oaram {int} v1 an integer
    # @param {int} v2 an integer
    # @return {ListNode} a new head of singly-linked list
    def swapNodes(self, head, v1, v2):
        # Write your code here
        dummy = ListNode(0)
        dummy.next = head
        prev1, cur1 = self.findNode(dummy, v1)
        prev2, cur2 = self.findNode(dummy, v2)
        
        if cur1 and cur2:
            prev1.next = cur2
            temp = cur2.next
            if cur1.next == cur2:
                cur2.next = cur1
                cur1.next = temp
            else:
                cur2.next = cur1.next
                prev2.next = cur1
                cur1.next = temp
            
        return dummy.next
        
    def findNode(self, head, value):
        while head.next != None:
            if head.next.val == value:
                return head, head.next
            head = head.next
        return None, None
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,353评论 0 33
  • 弗洛伊德算法适用于为图中每一个顶点求最短路径,思路如下 检查图中任何一个 到 任何另一个点能否通过第一个点降低最短...
    RichardW阅读 4,500评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,749评论 19 139
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 8,643评论 0 19
  • Swift算法俱乐部:Swift 链表数据结构@(Swift)在本教程中,我们将会在Swift 3中实现链表。##...
    刘铭iOS阅读 2,350评论 0 1