143. Reorder List
来源:互联网 发布:cms内容管理系统设计 编辑:程序博客网 时间:2024/06/12 23:21
题目:
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}
.
题意:
重新排序给定的链表,只能交换节点,不能修改节点值。
思路:
1、设置快慢两个指针用来找到链表中点;
2、将中点之后的半段链表反转;
3、之后将反转的部分与前半段的链表合并即可。
代码:67ms
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: void reorderList(ListNode* head) { if(head==nullptr || head->next==nullptr) return; ListNode *slow = head, *fast = head, *prev = nullptr; while (fast && fast->next) { //用来找到链表中间节点 prev = slow; slow = slow->next; fast = fast->next->next; } prev->next = nullptr; slow = reverseList(slow); //反转后半段链表 ListNode *curr = head; while (curr->next) { //合成两段链表 ListNode *tmp = curr->next; curr->next = slow; slow = slow->next; curr->next->next = tmp; curr = tmp; } curr->next = slow; } ListNode *reverseList(ListNode *head){ //反转链表 if (head==nullptr || head->next==nullptr) return head; ListNode *prev = head; for(ListNode *curr = head->next, *next = curr->next; curr; prev = curr, curr = next, next = next ? next->next : nullptr) { curr->next = prev; } head->next = nullptr; return prev; }};代码:java版:3ms
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */public class Solution { public void reorderList(ListNode head) { if(head==null || head.next==null) return; //找到链表中间节点 ListNode p1 = head; ListNode p2 = head; while(p2.next!=null && p2.next.next!=null){ p1 = p1.next; p2 = p2.next.next; } //反转中间节点之后的链表 ListNode preMiddle = p1; ListNode preCurrent = p1.next; while(preCurrent.next!=null){ ListNode current = preCurrent.next; preCurrent.next = current.next; current.next = preMiddle.next; preMiddle.next = current; } //合成两段子链表 p1 = head; p2 = preMiddle.next; while(p1!=preMiddle){ preMiddle.next = p2.next; p2.next = p1.next; p1.next = p2; p1 = p2.next; p2 = preMiddle.next; } }}
0 0
- [LeetCode]143.Reorder List
- LeetCode 143. Reorder List
- 143. Reorder List
- [leetcode] 143.Reorder List
- 143. Reorder List
- 143. Reorder List
- leetcode 143. Reorder List
- 143. Reorder List LeetCode
- 143. Reorder List
- LeetCode 143. Reorder List
- 143. Reorder List
- 143. Reorder List
- LeetCode 143. Reorder List
- LeetCode 143. Reorder List
- 143. Reorder List
- 143. Reorder List
- LeetCode *** 143. Reorder List
- 143. Reorder List
- android2.3.4----7.mtd partition的添加
- Xss总结
- Longest Palindromic Substring-----LeetCode
- Java反射机制
- android2.3.4----8. nand flash驱动分析
- 143. Reorder List
- 长短记忆型递归神经网络LSTM
- rk3188--1.mkimage.sh及cpio打包过程分析
- 任务调度问题实验
- checkbox与说明文字无法对齐的问题
- FPGA笔记(六)
- Linux学习网站推荐
- Intellij IDEA配置javaweb开发环境
- ZendStudio安装