fork download
  1. #include <stdio.h>
  2. #include <malloc.h>
  3.  
  4. typedef struct Node
  5. {
  6. int data;
  7. struct Node* pNext;
  8. }Node;
  9.  
  10. Node* GetNode(int data)
  11. {
  12. Node *tempNode = (Node*) malloc (sizeof(Node));
  13. tempNode->data = data;
  14. tempNode->pNext = NULL;
  15.  
  16. return tempNode;
  17. }
  18.  
  19. void AddNode(Node**rootNode, int data)
  20. {
  21. if (!*rootNode)
  22. *rootNode = GetNode(data);
  23. else
  24. {
  25. AddNode(&((*rootNode)->pNext), data);
  26. }
  27. }
  28.  
  29. void TraverseList(Node *pRoot)
  30. {
  31. while (pRoot)
  32. {
  33. printf("%d ", pRoot->data);
  34. pRoot = pRoot->pNext;
  35. }
  36.  
  37. printf ("\n");
  38. }
  39.  
  40. Node* MergeSortedLinkedLists(Node *pFirst, Node *pSecond)
  41. {
  42. Node tempNode;
  43. Node *pCrawler = &tempNode;
  44.  
  45. while (pFirst && pSecond)
  46. {
  47. if (pFirst->data < pSecond->data)
  48. {
  49. pCrawler->pNext = pFirst;
  50. pFirst = pFirst->pNext;
  51. }
  52. else
  53. {
  54. pCrawler->pNext = pSecond;
  55. pSecond = pSecond->pNext;
  56. }
  57. pCrawler = pCrawler->pNext;
  58. }
  59.  
  60. if (pFirst)
  61. pCrawler->pNext = pFirst;
  62.  
  63. if (pSecond)
  64. pCrawler->pNext = pSecond;
  65.  
  66. return tempNode.pNext;
  67. }
  68.  
  69. int main(void) {
  70. Node *pRootFirst = NULL;
  71. AddNode(&pRootFirst, 1);
  72. AddNode(&pRootFirst, 3);
  73. AddNode(&pRootFirst, 5);
  74. TraverseList(pRootFirst);
  75.  
  76. Node *pRootSecond = NULL;
  77. AddNode(&pRootSecond, 2);
  78. AddNode(&pRootSecond, 4);
  79. AddNode(&pRootSecond, 6);
  80. TraverseList(pRootSecond);
  81.  
  82. Node *pRootMerge = MergeSortedLinkedLists(pRootFirst, pRootSecond);
  83.  
  84. printf("Done with merging. Printing Data...\n");
  85. TraverseList(pRootMerge);
  86.  
  87. return 0;
  88. }
  89.  
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
1 3 5 
2 4 6 
Done with merging. Printing Data...
1 2 3 4 5 6