From c56dc80737d763335c5dbc2258df8a85982d3ba8 Mon Sep 17 00:00:00 2001 From: begeekmyfriend Date: Mon, 17 Jul 2017 16:06:05 +0800 Subject: [PATCH] Swap nodes in pairs Signed-off-by: begeekmyfriend --- 024_swap_nodes_in_pairs/Makefile | 2 + 024_swap_nodes_in_pairs/swap_nodes.c | 56 ++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 024_swap_nodes_in_pairs/Makefile create mode 100644 024_swap_nodes_in_pairs/swap_nodes.c diff --git a/024_swap_nodes_in_pairs/Makefile b/024_swap_nodes_in_pairs/Makefile new file mode 100644 index 0000000..a3f3513 --- /dev/null +++ b/024_swap_nodes_in_pairs/Makefile @@ -0,0 +1,2 @@ +all: + gcc -O2 -o test swap_nodes.c diff --git a/024_swap_nodes_in_pairs/swap_nodes.c b/024_swap_nodes_in_pairs/swap_nodes.c new file mode 100644 index 0000000..c491b22 --- /dev/null +++ b/024_swap_nodes_in_pairs/swap_nodes.c @@ -0,0 +1,56 @@ +#include +#include + +struct ListNode { + int val; + struct ListNode *next; +}; + +static struct ListNode* swapPairs(struct ListNode* head) { + struct ListNode dummy, *p, *prev, *next; + if (head == NULL) { + return NULL; + } + dummy.next = head; + prev = &dummy; + p = dummy.next; + next = p->next; + while (p != NULL && next != NULL) { + prev->next = next; + p->next = next->next; + next->next = p; + prev = p; + p = p->next; + if (p != NULL) { + next = p->next; + } + } + return dummy.next; +} + +int main(int argc, char **argv) +{ + int i; + struct ListNode *p, *prev, dummy, *list; + + dummy.next = NULL; + prev = &dummy; + for (i = 1; i < argc; i++) { + p = malloc(sizeof(*p)); + int n = atoi(argv[i]); + printf("%d ", n); + p->val = n; + p->next = NULL; + prev->next = p; + prev = p; + } + putchar('\n'); + + list = swapPairs(dummy.next); + for (p = list; p != NULL; p = p->next) { + printf("%d ", p->val); + } + putchar('\n'); + + return 0; +}