Facebook
From piotr, 3 Years ago, written in C.
Embed
Download Paste or View Raw
Hits: 66
  1. LinkedListNode* mergeLists(LinkedListNode* a, LinkedListNode *b){
  2.     // assumes length a >= length b    
  3.     LinkedListNode *curNode=a, *nextNode=b, *nextNextNode;
  4.     while(curNode != NULL && nextNode!=NULL){
  5.         nextNextNode = curNode->next;
  6.         curNode->next = nextNode;
  7.         curNode = nextNode;
  8.         nextNode = nextNextNode;
  9.     }
  10.     return a;
  11. }
  12.  
  13. LinkedListNode* reverseList(LinkedListNode* a){
  14.     LinkedListNode *head = NULL, *curNode=a, *nextNode;
  15.     while(curNode!=NULL){
  16.         nextNode = curNode->next;
  17.         curNode->next = head;
  18.         head = curNode;
  19.         curNode = nextNode;
  20.     }
  21.     return head;
  22. }
  23.  
  24. LinkedListNode* getLowerMiddleNode(LinkedListNode* a){
  25.     LinkedListNode *singleJump=a, *doubleJump = a;
  26.     while(doubleJump->next != NULL && doubleJump->next->next != NULL){
  27.         singleJump = singleJump->next;
  28.         doubleJump = doubleJump->next->next;
  29.     }
  30.     return singleJump;
  31. }
  32.  
  33. LinkedListNode* reverseZigZagMerge(LinkedListNode* a){
  34.     if(a == NULL) return NULL;
  35.     LinkedListNode *lowerMiddelNode = getLowerMiddleNode(a);
  36.     LinkedListNode *secondHalf = lowerMiddelNode->next;
  37.     lowerMiddelNode->next = NULL;
  38.     return mergeLists(a,reverseList(secondHalf));
  39. }
  40.