题解 | #重排链表#

重排链表

http://www.nowcoder.com/practice/3d281dc0b3704347846a110bf561ef6b

# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#
# 
# @param head ListNode类 
# @return void
#
class Solution:
    def reorderList(self , head ):
        # write code here
        # --------------------#
        # 首先判断head是否为空
        # --------------------#
        if head is None:
            return
        # -------------------------------------#
        # 建立前向和后向数组,并获取head的长度
        # -------------------------------------#
        front = []
        back = []
        count = self.count_num(head)
        # -------------------------------------------#
        # 将题目要求的奇数个存入front,偶数个存入back
        # -------------------------------------------#
        for i in range(count):
            mum = head
            head = head.next
            mum.next = None
            if i < int(count/2)+1:
                front.append(mum)
            else:
                back.append(mum)
        # --------------------#
        # 开始建立新的链表
        # --------------------#
        newhead = front[0]
        temp = newhead
        if count%2 == 1 or count == 2:
            for i in range(len(front)-1):
                if len(back) > 0:
                    temp.next = back[len(back) - i - 1]
                    temp = temp.next
                    temp.next = front[i+1]
                    temp = temp.next
                else:
                    temp.next = front[i+1]
                    temp = temp.next
        else:
            for i in range(len(front)-2):
                temp.next = back[len(back) - i - 1]
                temp = temp.next
                temp.next = front[i+1]
                temp = temp.next
                if i == len(front)-3:
                    temp.next = front[i+2]
                    temp = temp.next
        return newhead
    
    # --------------------#
    # 计算head的长度的函数
    # --------------------#
    def count_num(self, head):
        count = 0
        while head != None:
            count += 1
            head = head.next
        return count
        
全部评论

相关推荐

02-14 12:40
门头沟学院 Java
程序员花海:1.面试要求必须Java笔试不一定 2.难度对等秋招 远超于日常实习是因为同一批次且转正很多 竞争压力大 3.第一个加点指标,上线了就把接口性能加上去 使用本地缓存这个不算亮点 只是技术选型,要把为什么采用这个和背后的思考写出来而不是单纯堆叠技术没意义 4.八股要一直看 很容易忘记 5.拼团交易这个老问题 堆积技术 另外建议你把奖项合并到教育背景 没必要拆出来放最后
我的简历长这样
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务