#include <stdio.h> struct node { int val; struct node *pNext; }; struct node *gen() { struct node *pHead = NULL; for(int i = 10; i > 0; i--){ struct node * p = 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 * reverse(struct node *pHead) { if (pHead == NULL || pHead -> pNext == NULL) { return pHead; } struct node *p = pHead -> pNext; struct node *pNewHead = reverse(p); p -> pNext = pHead; pHead ->pNext = NULL; return pNewHead; } 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(); display(pHead); struct node *pHeadB = gen(); pHead = merge(pHead, pHeadB), display(pHead); pHead = reverse(pHead); display(pHead); }
递归逆转链表和递归合并有序链表的代码,布布扣,bubuko.com
原文地址:http://blog.csdn.net/moxiaopeng/article/details/37695797