LeetCode 143: Reorder List 题解(python)

该博客介绍了LeetCode 143题的解决方案,涉及链表操作。题目要求不改变节点值,而是对链表节点进行重新排序。解题思路包括使用快慢指针找到链表中点,反转后半部分链表,再交替连接前半部分和已反转的后半部分,实现链表的重新排序。文章强调解题过程中需要注意的细节,如链表操作的正确性和Python中链表表示的特性。
摘要由CSDN通过智能技术生成

Leetcode 143: Reorder List

分类:Linked List
难度:M (M+?)
描述:给了一个linkedlist,要按照一定的顺序把它重新排序。排序方法见示例。注意要求的是不可以改变每个节点的值,而是以节点为单位进行操作。没有返回值。
Given a singly linked list L: L0→L1→…→Ln-1→Ln,
reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…

Given 1->2->3->4, reorder it to 1->4->2->3.

Given 1->2->3->4->5, reorder it to 1->5->2->4->3.

链接: Reorder List.

思路:

这个题咋一看很麻烦,其实思路上比较简单。首先,先找到这个链表的1/2处节点,然后前1/2节点不变,后1/2的链表反转,然后再把前后链表交替链接,即可得出结果。

首先,需要得到1/2处节点,可以使用快慢指针法,也可以用一个i去记录原始链表的长度,再去寻找1/2处的节点即可。此处将使用快慢指针法。

这个题麻烦在细节处理要细致一些,不然就会容易出错。因为没有返回值,而是在原链表上进行操作,所以需要仔细小心。还有别的细节上的问题,比方说在python中的linked list的表述,要明白以节点为代表的linkedlist,代表的是哪一部分,在什么地方指向None,每次复制linked list后,是对原始的linked list进行操作,还是对复制后的进行操作。这些需要多加注意。

# Definition for singly-linked list.
# class ListNode:
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值