首页 > 学院 > 开发设计 > 正文

92. Reverse Linked List II(链表局部逆序**)

2019-11-08 01:11:43
字体:
来源:转载
供稿:网友
Reverse a linked list from position m to n. Do it in-place and in one-pass.For example:Given 1->2->3->4->5->NULL, m = 2 and n = 4,return 1->4->3->2->5->NULL.

此问题看似简单,实际很麻烦,如果不使用二级指针,那么如果链表仅有两项,并且要求m=1,n=2,那么我们无从存储PRev,还要考虑多种情况。使用二级指针可以简化:

class Solution {public: ListNode* reverseBetween(ListNode* head, int m, int n) { if(head == NULL || m == n) return head; ListNode** pp = &head; for(int i=1; i<m; ++i) pp = &((*pp)->next); ListNode* end = *pp; ListNode* prev = NULL; for(int i=m; i<=n; ++i){ ListNode* cur = (*pp); (*pp) = (*pp)->next; cur->next = prev; prev = cur; } end->next = *pp; *pp = prev; return head; }};
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表