问题:给定一个单链接列表,修改前半个节点的值,以便:第一个节点的新值=最后一个节点的值--第一个节点的当前值第二个节点的新值=第二个最后一个节点的值-第二个节点的当前值,等等…。注:如果链表的长度L是奇数,那么上半部分就意味着在一楼(L/2)节点。所以,如果L= 5,上半部分指的是前2个节点。如果链表的长度L是偶数,那么前半部分就表示在第二个节点上。所以,如果L= 4,上半部分指的是前2个节点。示例:给定链表1 -> 2 -> 3 -> 4 -> 5,返回4 -> 2 -> 3 -> 4 -> 5作为第一个节点,5-1=4表示第二节点,4-2=2试图用恒定的额外空间来解决问题。
这是我在网站的外壳上的解决方案。如何才能更好地编写这些代码?
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param A : head node of linked list
# @return the head node in the linked list
def subtract(self, A):
if not A.next:
return A
fast = A
slow = A
prev = None
cnt = 0
# reach till half
while fast and fast.next:
fast = fast.next.next
slow = slow.next
cnt += 1
if fast:
start = slow.next
else:
start = slow
#reverse the latter half
while start:
temp = start.next
start.next = prev
prev = start
start = temp
firstA = A
lastA = prev
prev1 = prev
currA = A
# modify values of first half
while cnt:
currA.val = lastA.val - firstA.val
firstA = firstA.next
lastA = prev.next
prev = prev.next
currA = currA.next
cnt -= 1
# reverse the list again
new_prev =None
while prev1:
temp = prev1.next
prev1.next = new_prev
new_prev = prev1
prev1 = temp
return A发布于 2018-06-09 18:38:29
更多的功能,谢谢。
每当您感到不得不对代码块进行注释时,请考虑将其分解为一个正确命名的函数。例如,
def subtract(A):
start = reach_till_half(A)
prev = reverse(start)
modify(A, prev)
reverse(prev)当然,名字可以(而且应该)更好。
https://codereview.stackexchange.com/questions/196178
复制相似问题