Skip to content

Commit 754133f

Browse files
Refine
Signed-off-by: begeekmyfriend <begeekmyfriend@gmail.com>
1 parent 71d24d7 commit 754133f

File tree

2 files changed

+35
-25
lines changed

2 files changed

+35
-25
lines changed

092_reverse_linked_list_ii/reverse_list.c

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,25 @@ struct ListNode {
88

99
static struct ListNode* reverseBetween(struct ListNode* head, int m, int n)
1010
{
11-
int len = n - m + 1;
12-
if (len == 1) {
13-
return head;
14-
}
15-
11+
int i;
1612
struct ListNode dummy;
17-
struct ListNode *p = head;
1813
struct ListNode *prev = &dummy;
19-
prev->next = p;
20-
while (--m > 0) {
21-
prev = p;
22-
p = p->next;
14+
prev->next = head;
15+
16+
for (i = 1; i < m; i++) {
17+
prev = prev->next;
2318
}
2419

25-
struct ListNode *q = p->next;
26-
while (--len > 0) {
20+
struct ListNode *p = prev->next;
21+
for (i = m; i < n; i++) {
22+
struct ListNode *q = p->next;
23+
/* deletion */
2724
p->next = q->next;
25+
/* insertion */
2826
q->next = prev->next;
2927
prev->next = q;
30-
q = p->next;
3128
}
29+
3230
return dummy.next;
3331
}
3432

206_reverse_linked_list/reverse_list.c

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,39 @@ struct ListNode {
66
struct ListNode *next;
77
};
88

9-
static void recursive(struct ListNode *dummy, struct ListNode *prev, struct ListNode *p)
9+
static struct ListNode *recursive(struct ListNode *prev, struct ListNode *p)
1010
{
11-
if (p != NULL) {
12-
prev->next = p->next;
13-
p->next = dummy->next;
14-
dummy->next = p;
15-
recursive(dummy, prev, prev->next);
11+
if (p == NULL) {
12+
return prev;
1613
}
14+
15+
struct ListNode *q = p->next;
16+
p->next = prev;
17+
return recursive(p, q);
1718
}
1819

1920
static struct ListNode *reverseList(struct ListNode *head)
2021
{
21-
if (head == NULL) {
22-
return NULL;
22+
return recursive(NULL, head);
23+
}
24+
25+
26+
/* Iteration */
27+
#if 0
28+
static struct ListNode *reverseList(struct ListNode *head)
29+
{
30+
struct ListNode *prev = NULL;
31+
struct ListNode *p = head;
32+
while (p != NULL) {
33+
struct ListNode *q = p->next;
34+
p->next = prev;
35+
prev = p;
36+
p = q;
2337
}
2438

25-
struct ListNode dummy;
26-
dummy.next = head;
27-
recursive(&dummy, head, head->next);
28-
return dummy.next;
39+
return prev;
2940
}
41+
#endif
3042

3143
int main(int argc, char **argv)
3244
{

0 commit comments

Comments
 (0)