遞迴合併有序連結串列C語言
阿新 • • 發佈:2019-01-03
include <stdio.h> #include <stdlib.h> struct node { int val; struct node *pNext; }; struct node *gen(int Num) { struct node *pHead = NULL; for(int i = Num; i > 0; i--){ struct node * p = (struct node *)malloc(sizeof(struct node)); p -> val = i; p -> pNext = pHead; pHead = p; } return pHead; } void display(struct node *pHead) { while( pHead != NULL) { printf("%d ", pHead->val); pHead = pHead->pNext; } printf("\n"); } struct node * merge(struct node *pHeadA, struct node *pHeadB) { if(pHeadA == NULL ) return pHeadB; if(pHeadB == NULL ) return pHeadA; if(pHeadA -> val < pHeadB -> val) { pHeadA -> pNext = merge(pHeadA -> pNext, pHeadB); return pHeadA; } else { pHeadB -> pNext = merge(pHeadA, pHeadB -> pNext); return pHeadB; } } int main() { struct node *pHead = gen(10); display(pHead); struct node *pHeadB = gen(10); pHead = merge(pHead, pHeadB); display(pHead); }