算法-连接两条排序的链表

来源:互联网 发布:粒子群算法电子书 编辑:程序博客网 时间:2024/06/07 08:41

之前在牛客网上面做的题目,感觉对自己很有帮助,而且以后面试可能会用到,整理了两种方法,递归的和非递归的,同时也是对代码再一次巩固了。

ok,第一种,用递归实现!

class Solution{ListNode * Merge(ListNode* pHead1, ListNode *pHead2){if (pHead1 == NULL)            //如果pHead1当前指向的节点为空返回当前pHead2指向的节点{return phead2;}if (pHead2 == NULL){return pHead1;            //如果pHead2当前指向的节点为空返回当前pHead1指向的节点}if (pHead1->val < pHead2->val)//如果两个节点当前指向的都不为空的话那么就比较{pHead1->next = Merge(pHead1->next, pHead2);    //如果pHead1大,那么下一个节点将从pHead1->next和pHead2决出return pHead1;                                //第一次比较的头结点决定最后返回哪个头结点}else{pHead2->next = Merge(pHead1, pHead2->next);    //如果pHead2大,那么下一个节点将从pHead和pHead2->next决出return pHead2;}}};


第二种,非递归算法。
   

class Solution{ListNode * Merge(ListNode * pHead1, ListNode *pHead2){ListNode * cur = NULL;                //当前结点位置ListNode * result = NULL;             //最后返回的头结点if (pHead1 == NULL)                   {return pHead2;}if (pHead2 == NULL){return pHead1;}while (pHead1 != NULL && pHead2 != NULL)//两个头结点同时都不为空{if (pHead1->val < pHead2->val){if (result == NULL)             //如果当前result为空那么当前节点和最后头结点都为pHead1{cur = result = pHead1;}else                            //如果不空那么当前节点的下一个肯定是这次比较小的那个{cur->next = pHead1;cur = cur->next;}pHead1 = pHead1->next;          //pHead则需要往后遍历一个}else{if (pHead1->val > pHead2->val){if (result == NULL){cur = result = pHead2;}else {cur->next = pHead2;cur = cur->next;}pHead2 = pHead2->next;}}}if (pHead1 == NULL)                      //退出while循环后如果某一条链表还没有完全遍历则把cur指向{cur->next = pHead2;}if (pHead2 == NULL){cur->next = pHead1;}}};


原创粉丝点击