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: