题目
思路
遍历,找到nodeV1和nodeV2,交换即可。
注意noveV1和nodeV2相邻的情况。
代码
"""
Definition for singly-linked list.
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
"""
class Solution:
"""
@param: head: a ListNode
@param: v1: An integer
@param: v2: An integer
@return: a new head of singly-linked list
"""
def swapNodes(self, head, v1, v2):
# write your code here
dummy = ListNode(0)
dummy.next = head
pre = dummy
node = head
nodeV1 = None
pre_nodeV1 = None
nodeV2 = None
pre_nodeV2 = None
while node:
if node.val == v1:
pre_nodeV1 = pre
nodeV1 = node
elif node.val == v2:
pre_nodeV2 = pre
nodeV2 = node
if nodeV1 and nodeV2:
break
pre = pre.next
node = node.next
if nodeV1 and nodeV2:
if nodeV1.next == nodeV2:
tmp = nodeV2.next
pre_nodeV1.next = nodeV2
nodeV2.next = nodeV1
nodeV1.next = tmp
elif nodeV2.next == nodeV1:
tmp = nodeV1.next
pre_nodeV2.next = nodeV1
nodeV1.next = nodeV2
nodeV2.next = tmp
else:
tmp = nodeV2.next
pre_nodeV1.next = nodeV2
nodeV2.next = nodeV1.next
pre_nodeV2.next = nodeV1
nodeV1.next = tmp
return dummy.next