标签:OWIN style 描述 nbsp ebe nod 错误 节点 sel
题目描述:
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.
Note: 
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
1 /**
2  * Definition for singly-linked list.
3  * struct ListNode {
4  *     int val;
5  *     ListNode *next;
6  *     ListNode(int x) : val(x), next(NULL) {}
7  * };
8  */
代码:
 1 class Solution {
 2 public:
 3     ListNode *reverseBetween(ListNode *head, int m, int n) {
 4                            //短路原则
 5         if(head==nullptr || m>=n || n<1)
 6             return head;
 7         ListNode dummy = ListNode(-1);
 8         dummy.next = head;
 9         ListNode *pre = nullptr;
10         ListNode *p = &dummy;
11         int cnt = 0;//由于这里是从左往右的第几个节点,所以直接数出来就可以了
12         //每遇到一个非空节点,更新一下计数值
13         //按照前进步数的方法在m=1时不用走就到达了,会出现错误
14         while(p!=nullptr)
15         {   
16             cnt++;
17             if(cnt == m)
18                pre = p;
19             if(cnt == n+1)
20                break;   
21             p = p->next;
22         } 
23         if(p==nullptr)
24             return head;
25         ListNode *next = p->next;
26         p->next = nullptr;
27         ListNode *cur = pre->next;
28         pre->next = nullptr;
29         pre->next = reverseList(cur);
30         cur->next = next;
31         return dummy.next;       
32     }
33 
34     ListNode *reverseList(ListNode *head)
35     {
36         if(head==nullptr || head->next==nullptr)
37             return head;
38         ListNode *last = nullptr;
39         ListNode *cur = head;
40         while(cur!=nullptr)
41         {
42             ListNode * temp = cur->next;
43             cur->next = last;
44             last = cur;
45             cur = temp;
46         }
47         return last;
48 
49     }
50 
51 };
标签:OWIN style 描述 nbsp ebe nod 错误 节点 sel
原文地址:https://www.cnblogs.com/zjuhaohaoxuexi/p/11780106.html