39:Reorder List
来源:互联网 发布:西西软件下载 编辑:程序博客网 时间:2024/05/23 22:58
题目:Given a singly linked list L :
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}.
解析:将链表从中间断开,然后将后半段链表逆序,最后将前半段链表以及逆过序后的后半段链表合并在一起
解题代码如下:
class Solution {public: void reorderList(ListNode *head) { if (!head || !head -> next) return; //计算链表总长度 int len = 0; ListNode *cur = head; while (cur != nullptr) { ++len; cur = cur -> next; } int mid = len % 2 != 0 ? len / 2 + 1 : len / 2; ListNode* mid_ptr = head; for (int i = 0; i != mid - 1; ++i) mid_ptr = mid_ptr -> next; // 从中间将原先链表分成两个链表 ListNode* head2 = mid_ptr -> next; mid_ptr -> next = nullptr; // 将后半段链表逆序 head2 = reverseList(head2); //将这两个链表再次合并成一个链表 ListNode *cur1 = head, *cur2 = head2; while (cur2 != nullptr) { ListNode* tmp = cur2 -> next; cur2 -> next = cur1 -> next; cur1 -> next = cur2; cur1 = cur1 -> next -> next; cur2 = tmp; } }private: ListNode* reverseList(ListNode* head) { if (!head) return head; ListNode dummy{-1}; dummy.next = head; ListNode* cur = head; while (cur -> next != nullptr) { ListNode* tmp = cur -> next; cur -> next = tmp -> next; tmp -> next = dummy.next; dummy.next = tmp; } return head; }};
0 0
- 39:Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- Reorder List
- 学习中遇到的几个棘手的问题,很关键
- struct来处理C语言中的结构体
- 个人技能知识图谱
- Java复习之Object类
- java中的synchronized两种用法
- 39:Reorder List
- 可运行于Windows 10 UWP的Python解释器
- VTK读取一个TXT文档中的三维点坐标显示三维点云
- [半平面交] BZOJ1007: [HNOI2008]水平可见直线
- Ubuntu下修改文件夹权限
- 应用程序段错误调试
- jpa多表查询 HQL
- [LeetCode] Integer to Roman 解题报告
- 《Docker……》笔记-9 Docker 安全