Reorder List
来源:互联网 发布:java编写倒99乘法表 编辑:程序博客网 时间:2024/06/01 18:49
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}
.
把后面的部分插入前面。
中心思想,将链表重中间断开,然后把后面的链表部分倒序,之后把后面链表的头节点依次插入到head链表里面。
其代码如下。
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* reverseList(struct ListNode* head);int LengthList(struct ListNode* head);void reorderList(struct ListNode* head){if(head==NULL||head->next==NULL)return ;int mid; int length; struct ListNode* pCurrent=head;length=LengthList(pCurrent); mid=(length+1)/2; //3 应该是第2个,以后也是在后面一个 //找到中间节点,分成两条链表,//mid 后面哪一个开始struct ListNode* pCurrentmid=head;struct ListNode* pCurrentmidFront;while(mid--){ pCurrentmidFront=pCurrentmid; pCurrentmid=pCurrentmid->next; //mid=1,最后一个设置为null}struct ListNode* pCurrentMidafter=pCurrentmid; //3--->1 pCurrentmidFront->next=NULL; //让他变成两个链表//翻转pCurrentMidafterpCurrentMidafter=reverseList(pCurrentMidafter);//DisplayList(pCurrentMidafter);//DisplayList(head);// //将翻转后的链表插入到head链表中..pCurrent=head;while(pCurrent!=NULL&&pCurrentMidafter!=NULL){ pCurrentmidFront=pCurrentMidafter; pCurrentMidafter=pCurrentMidafter->next; //插入 pCurrentmidFront->next=pCurrent->next; pCurrent->next=pCurrentmidFront; //放回原位 pCurrent=pCurrentmidFront->next;}}int LengthList(struct ListNode* head) {if(head==NULL)return 0;int length=0;struct ListNode* pCurrent=head;while(pCurrent!=NULL){length++;pCurrent=pCurrent->next;}//free(pCurrent);return length;}struct ListNode* reverseList(struct ListNode* head) {struct ListNode* newhead;newhead=NULL;//这样就不需要翻转了if (head==NULL||head->next==NULL){return head;}struct ListNode* pCurrent=head; //一样的点while(pCurrent!=NULL){struct ListNode* tmp=pCurrent;pCurrent=pCurrent->next;tmp->next=newhead; //把节点放在节点前面,插入到链表的最前端newhead=tmp;}return newhead;}
0 0
- 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
- Apache Shiro 使用手册(四)Realm 实现
- [LeetCode]Single Number
- 轻松自动化---selenium-webdriver(python) (二)
- 对象中间件--CORBA开发练习
- js闭包
- Reorder List
- response内置对象
- 堆排序 HeapSort
- Android5.x新特性之 Toolbar和Theme的使用
- Unity导出的iOS项目出错Use of undeclared identifier 'GL_BGRA_EXT'
- openstack快照分析
- 使用EXCEL设置“下拉菜单”选项功能
- 进程和线程关系及区别
- AndroidAnnotations——Injecting FragmentArg注入Fragment参数