首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减去链表的第一个和最后一个节点

减去链表的第一个和最后一个节点
EN

Code Review用户
提问于 2018-06-09 18:09:56
回答 1查看 565关注 0票数 0

来自www.interviewbit.com。的问题

问题:给定一个单链接列表,修改前半个节点的值,以便:第一个节点的新值=最后一个节点的值--第一个节点的当前值第二个节点的新值=第二个最后一个节点的值-第二个节点的当前值,等等…。注:如果链表的长度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试图用恒定的额外空间来解决问题。

这是我在网站的外壳上的解决方案。如何才能更好地编写这些代码?

代码语言:javascript
复制
# 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
EN

回答 1

Code Review用户

发布于 2018-06-09 18:38:29

更多的功能,谢谢。

每当您感到不得不对代码块进行注释时,请考虑将其分解为一个正确命名的函数。例如,

代码语言:javascript
复制
def subtract(A):
    start = reach_till_half(A)
    prev = reverse(start)
    modify(A, prev)
    reverse(prev)

当然,名字可以(而且应该)更好。

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/196178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档