Reverse Linked List II
来源:互联网 发布:淘宝网家居拖鞋 编辑:程序博客网 时间:2024/05/20 17:25
<span style="font-size:14px;">这一道题,最好先做之前的 Reverse Linked ListI</span>
之后把他分成几个节点
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *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;}struct ListNode* reverseBetween(struct ListNode* head, int m, int n) {int length;struct ListNode* pCurrent=head;length=LengthList(pCurrent);int diff=n-m;if (diff==0){return head;}if (m==1){if (length==n){head=reverseList(head);return head;}if (n<length){pCurrent=head;while (diff--) //{pCurrent=pCurrent->next;}struct ListNode* pCurrentNhead;pCurrentNhead=pCurrent->next;struct ListNode* pCurrentMTail=pCurrent;pCurrent->next=NULL; //first tail node.head=reverseList(head);pCurrent=head;while(pCurrent->next!=NULL) //走到反转的地方n头结点的前面.. //另外一种方法m都头结点已经算是尾节点了。{pCurrent=pCurrent->next;}pCurrent->next=pCurrentNhead;return head; }}else{if (length==n) {struct ListNode* pCurrentHeadTail=head;pCurrent=head; m--; while(m--) { pCurrentHeadTail=pCurrent; pCurrent=pCurrent->next; } //分段 pCurrentHeadTail->next=NULL; struct ListNode* pCurrentHeadm=pCurrent; pCurrent=pCurrentHeadm; pCurrentHeadm=reverseList(pCurrentHeadm); pCurrentHeadTail->next=pCurrentHeadm; return head; }if (n<length){struct ListNode* pCurrentHeadTail=head;pCurrent=head;m--;while(m--){pCurrentHeadTail=pCurrent;pCurrent=pCurrent->next;}//分段pCurrentHeadTail->next=NULL;struct ListNode* pCurrentHeadm=pCurrent; while (diff--){pCurrent=pCurrent->next;}struct ListNode* pCurrentNhead;pCurrentNhead=pCurrent->next;struct ListNode* pCurrentMTail=pCurrent;pCurrent->next=NULL;pCurrentMTail=pCurrentHeadm;pCurrentHeadm=reverseList(pCurrentHeadm);pCurrentHeadTail->next=pCurrentHeadm;pCurrentMTail->next=pCurrentNhead;return head;}}}
0 0
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- 实时计算在点评(转载)
- Spring IO 平台介绍
- 第一次发博客,新手初试啊,题目如下:有两个10个元素的数组,分别为A和B,编程实现相同位置的元素, 如果 B 的元素小于 A 的元素进行数值交换:(使用回调函数实现)
- GD库函数学习【笔记】
- vs2010修改包含目录,库目录以及依赖库
- Reverse Linked List II
- 【Android】ActionBar的使用(1)
- Behavioral模式之Mediator模式
- L and l
- adb操作sqlite3数据库
- hdu 1083 Courses
- 旧博客(看那时稚嫩的我。。。)
- 你遇到过最NB开发项目”有奖征文活动
- java.util.properties使用方法