Given a singly linked list L : L0→L1→…→Ln - 1→Ln,
reorder it to : L0→Ln→L1→Ln - 1→L2→Ln - 2→…
You must do this in - place without altering the nodes’ values.
For example,
Given{ 1,2,3,4 }, reorder it to{ 1,4,2,3 }.
题意:
给定一个单链表正常顺序,然后重新组合链表节点顺序,规则如L0→Ln→L1→Ln - 1→L2→Ln - 2→…
必须在常量空间,切不能改变节点元素值的情况下解题。
思路:
方法一:
非递归实现,先找到单链表的中点,然后断开,把后半部分逆转依次插入前半部分。
1 | //递归实现链表的反转 |
方法二:
递归实现,利用递归来执行head指针的前进和后退,当满足条件head == mid时递归结束,head往回移动。利用forward接收后半段的头结点,然后依次向后移动取节点插入到head的后面。
1 | ListNode *reorderList(ListNode *head,int counts) { |