每天一道算法题(16)——合并已排序的链表
题目
合并已经排序的2条链表
思路
递归策略:对于每一层递归,寻找最小的节点,然后嵌套递归
非递归:定义两个指针,初始化指向头结点,比较指针并移动节点指向
代码
非递归:
ListNode* mergeList(ListNode* List1,ListNode* List2) { if(!List1) return List2; if(!List2) return List1; ListNode* head=NULL; ListNode* tail=NULL; while(List1||List2){ if(List1->value<List2->value||!List2){//还有list2已经为空的情况 tail->next=List1; tail=tail->next; List1=List1->next; } else{ tail->next=List2; tail=tail->next; List2=List2->next; } if(!head) head=tail; } return head; }
递归:
ListNode* mergeList(ListNode* List1,ListNode* List2) { if(!List1) return List2; if(!List2) return List1; ListNode* head=NULL; if(List1->value<List2->value){ head=List1; head->next=mergeList(List1->next,List2); } else{ head=List2; head->next=mergeList(List1,List2->next); } return head; }