Skip to content

Commit

Permalink
Reverse nodes in K group
Browse files Browse the repository at this point in the history
Signed-off-by: begeekmyfriend <[email protected]>
  • Loading branch information
begeekmyfriend committed Jul 18, 2017
1 parent c56dc80 commit d93e8b1
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 0 deletions.
2 changes: 2 additions & 0 deletions 025_reverse_nodes_in_k_group/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
all:
gcc -O2 -o test reverse_nodes.c
77 changes: 77 additions & 0 deletions 025_reverse_nodes_in_k_group/reverse_nodes.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
int val;
struct ListNode *next;
};

static struct ListNode* reverseKGroup(struct ListNode* head, int k) {
if (head == NULL || k <= 1) {
return head;
}

int first = 1;
struct ListNode dummy;
dummy.next = head;
struct ListNode *dhead = &dummy;
struct ListNode *prev = head;
struct ListNode *p = head->next;
struct ListNode *next = p == NULL ? NULL : p->next;
while (p != NULL) {
int i;
struct ListNode *end = dhead->next;
for (i = 0; end != NULL && i < k; i++) {
end = end->next;
}
if (i < k) {
break;
}

while (p != end) {
p->next = dhead->next;
dhead->next = p;
prev->next = next;
p = next;
next = p == NULL ? NULL : p->next;
}

if (first) {
first = 0;
dummy.next = dhead->next;
}

dhead = prev;
prev = p;
p = p == NULL ? NULL : p->next;
next = p == NULL ? NULL : 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 = 2; 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 = reverseKGroup(dummy.next, atoi(argv[1]));
for (p = list; p != NULL; p = p->next) {
printf("%d ", p->val);
}
putchar('\n');

return 0;
}

0 comments on commit d93e8b1

Please sign in to comment.