题解 | #重排链表#

重排链表

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

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

#
#
# @param head ListNode类
# @return void
# 如果直接照搬c语言的解法应该也是可以实现的,但是python应该用python的解法。


class Solution:
    def count_num(self, head):
        count = 0
        while head != None:
            count += 1
            head = head.next
        return count

    def reorderList(self, head):
        # write code here
        if head is None or head.next is None or head.next.next is None:
            return head
        front = []
        back = []
        count = self.count_num(head)
        # 创建两个列表分别保存列表中前半部分和后半部分。
        for i in range(count):
            data = head
            head = head.next
            data.next = None
            if (count + 1) // 2 > i:
                front.append(data)
            else:
                back.append(data)

        # 反转第二部分列表
        back.reverse()

        # 将back列表插入front
        lens = len(front)
        j = 0
        for i in range(lens - 1):
            front.insert(2 * i + 1, back[j])
            j += 1

        if front[-1] != back[-1]:
            front.append(back[-1])

        # 将列表中的数据串联成一个链表。
        head = front
        for i in range(count - 1):
            front[i].next = front[i + 1]

全部评论
感觉这个解法还不如c语言来的简单,调试了好久
点赞 回复 分享
发布于 2023-08-07 17:44 北京

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务