diff options
| author | mo khan <mo.khan@gmail.com> | 2020-06-22 17:01:36 -0600 |
|---|---|---|
| committer | mo khan <mo.khan@gmail.com> | 2020-06-22 17:01:36 -0600 |
| commit | 0f0ab99a5eb26fb5f107fe0ad32f0569a2123cdb (patch) | |
| tree | e1a2a841c29d95857b9ccdc3f008354f9e74ffbb | |
| parent | c613b511b41f7214f063711ac41ed6d907f13391 (diff) | |
Extract safe functions for assign next/prev
| -rw-r--r-- | assignments/01/swap_doubly_linked_list_test.c | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/assignments/01/swap_doubly_linked_list_test.c b/assignments/01/swap_doubly_linked_list_test.c index 8ef6580..8c3490d 100644 --- a/assignments/01/swap_doubly_linked_list_test.c +++ b/assignments/01/swap_doubly_linked_list_test.c @@ -77,10 +77,16 @@ static int size(Node *head) { return i; } -/*x: Node *head = initialize(100);*/ -/* Node *mid1 = add(head, 200);*/ -/*y: Node *mid2 = add(head, 300);*/ -/* Node *tail = add(head, 400);*/ +static void assign_next(Node *self, Node *other) { + if (self) + self->next = other; +} + +static void assign_prev(Node *self, Node *other) { + if (self) + self->prev = other; +} + static void swap(Node *x, Node *y) { if (x == y) return; if (!x || !y) return; @@ -90,27 +96,21 @@ static void swap(Node *x, Node *y) { // if adjacent if (x->next == y && y->prev == x) { - x->next = yn; - if (yn) - x->next->prev = x; - x->prev = y; - y->next = x; - y->prev = xp; - if (xp) - y->prev->next = y; + assign_next(x, yn); + assign_prev(x->next, x); + assign_prev(x, y); + assign_next(y, x); + assign_prev(y, xp); + assign_next(y->prev, y); } else { - x->prev = y->prev; - if (x->prev) - x->prev->next = x; - x->next = yn; - if (yn) - x->next->prev = x; - y->prev = xp; - if (xp) - y->prev->next = y; - y->next = xn; - if (xn) - y->next->prev = y; + assign_prev(x, yp); + assign_next(x->prev, x); + assign_next(x, yn); + assign_prev(x->next, x); + assign_prev(y, xp); + assign_next(y->prev, y); + assign_next(y, xn); + assign_prev(y->next, y); } } |
