From f4cd8296df7ae469dbc010b8b4377b43aa751f5c Mon Sep 17 00:00:00 2001 From: begeekmyfriend Date: Tue, 22 Aug 2017 11:14:22 +0800 Subject: [PATCH] Reverse linked list Signed-off-by: begeekmyfriend --- 092_reverse_linked_list_ii/Makefile | 2 + 092_reverse_linked_list_ii/reverse_list.c | 60 +++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 092_reverse_linked_list_ii/Makefile create mode 100644 092_reverse_linked_list_ii/reverse_list.c diff --git a/092_reverse_linked_list_ii/Makefile b/092_reverse_linked_list_ii/Makefile new file mode 100644 index 0000000..d480ecf --- /dev/null +++ b/092_reverse_linked_list_ii/Makefile @@ -0,0 +1,2 @@ +all: + gcc -O2 -o test reverse_list.c diff --git a/092_reverse_linked_list_ii/reverse_list.c b/092_reverse_linked_list_ii/reverse_list.c new file mode 100644 index 0000000..a3d5815 --- /dev/null +++ b/092_reverse_linked_list_ii/reverse_list.c @@ -0,0 +1,60 @@ +#include +#include + +struct ListNode { + int val; + struct ListNode *next; +}; + +static struct ListNode* reverseBetween(struct ListNode* head, int m, int n) +{ + int len = n - m + 1; + if (len == 1) { + return head; + } + + struct ListNode dummy; + struct ListNode *p = head; + struct ListNode *prev = &dummy; + prev->next = p; + while (--m > 0) { + prev = p; + p = p->next; + } + + struct ListNode *q = p->next; + while (--len > 0) { + p->next = q->next; + q->next = prev->next; + prev->next = q; + q = p->next; + } + return dummy.next; +} + +int main(int argc, char **argv) +{ + if (argc < 3) { + fprintf(stderr, "Usage: ./test m n 1 2 3...\n"); + exit(-1); + } + int i, count = argc - 3; + struct ListNode dummy; + struct ListNode *prev = &dummy; + struct ListNode *p; + for (i = 0; i < count; i++) { + p = malloc(sizeof(*p)); + p->val = atoi(argv[i + 3]); + p->next = NULL; + prev->next = p; + prev = p; + } + int m = atoi(argv[1]); + int n = atoi(argv[2]); + struct ListNode *head = reverseBetween(dummy.next, m, n); + for (p = head; p != NULL; p = p->next) { + printf("%d ", p->val); + } + printf("\n"); + return 0; +}