网站备案账号,手机官方,如何制作宣传小视频,淘宝seo排名优化的方法原题链接#xff1a;
合并两个排序的链表_牛客题霸_牛客网
思路分析#xff1a;
第一步#xff1a;写一个链表尾插数据的方法。
typedef struct ListNode ListNode;//申请结点
ListNode* BuyNode(int x)
{ListNode* node (ListNode*)malloc(sizeof(ListNode));node-
合并两个排序的链表_牛客题霸_牛客网
思路分析
第一步写一个链表尾插数据的方法。
typedef struct ListNode ListNode;//申请结点
ListNode* BuyNode(int x)
{ListNode* node (ListNode*)malloc(sizeof(ListNode));node-val x;node-next NULL;return node;
}//尾插
void ListPushBack(ListNode** pphead, int x)
{ListNode* NewNode BuyNode(x);if(*pphead NULL){*pphead NewNode;}else {ListNode* pcur *pphead;while(pcur-next){pcur pcur-next;}pcur-next NewNode;}
}
第二步创建三个链表结点。l1 用来遍历链表1l2用来遍历链表2RetList 是返回链表。
ListNode* RetList NULL, *l1 pHead1, *l2 pHead2;
第三步进行遍历判断。如果 l1 结点里的值小于 l2 结点里的值就把 l1 结点里的值尾插到返回链表。反之就把 l2 结点里是值尾插到返回链表。 while(l1 l2){if(l1-val l2-val){ListPushBack(RetList, l1-val);l1 l1-next;}else{ListPushBack(RetList, l2-val);l2 l2-next;}}
循环之前 第一次循环之后 第二次循环之后 第三次循环之后 第四次循环之后 第五次循环之后 如果 l1 或者 l2 遍历到 NULL 的时候会有一方没有完全遍历完所有结点所以我们还需要补上两个循环去遍历完 l1 或者 l2。 while(l1){ListPushBack(RetList, l1-val);l1 l1-next;}while(l2){ListPushBack(RetList, l2-val);l2 l2-next;}return RetList;
完整代码
struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 )
{ListNode* RetList NULL, *l1 pHead1, *l2 pHead2;while(l1 l2){if(l1-val l2-val){ListPushBack(RetList, l1-val);l1 l1-next;}else{ListPushBack(RetList, l2-val);l2 l2-next;}}while(l1){ListPushBack(RetList, l1-val);l1 l1-next;}while(l2){ListPushBack(RetList, l2-val);l2 l2-next;}return RetList;
}