@@ -23,31 +23,36 @@ struct ListNode {
23
23
ListNode (int x) : val(x), next(NULL ) {}
24
24
};
25
25
26
+ ListNode * pushDummy (ListNode * head) {
27
+ ListNode * newNode = new ListNode (-1 );
28
+ newNode->next = head;
29
+ return newNode;
30
+ }
31
+
32
+ ListNode * popDummy (ListNode * head) {
33
+ ListNode * delNode = head;
34
+ head = head->next ;
35
+ delete delNode;
36
+ return head;
37
+ }
38
+
26
39
class Solution {
27
40
public:
28
41
ListNode *reverseBetween (ListNode *head, int m, int n) {
29
- ListNode * newHead = new ListNode (-1 );
30
- newHead->next = head;
31
- ListNode * preNode = NULL , * curNode = newHead;
32
- for (int i = 0 ; i < m; i++) preNode = curNode, curNode = curNode->next ;
33
- ListNode * preTail = preNode;
34
- preNode = NULL ;
35
- for (int i = 0 ; i <= n-m; i++) {
42
+ if (head == NULL || m < 1 || n < 1 || m > n) return head;
43
+ head = pushDummy (head);
44
+ ListNode * curNode = head, *lastNode = NULL ;
45
+ for (; m > 0 ; m--, n--) lastNode = curNode, curNode = curNode->next ;
46
+ ListNode *preNode = NULL ;
47
+ for (; n >= 0 ; n--) {
36
48
ListNode * nextNode = curNode->next ;
37
49
curNode->next = preNode;
38
50
preNode = curNode;
39
51
curNode = nextNode;
40
52
}
41
- preTail->next ->next = curNode;
42
- preTail->next = preNode;
43
- return deleteNode (newHead);
44
- }
45
-
46
- ListNode * deleteNode (ListNode * curNode) {
47
- ListNode * toDel = curNode;
48
- curNode = curNode->next ;
49
- delete toDel;
50
- return curNode;
53
+ lastNode->next ->next = curNode;
54
+ lastNode->next = preNode;
55
+ return popDummy (head);
51
56
}
52
57
};
53
58
0 commit comments