原題鏈接: 合成兩個有序鏈表.
題目:
難度:



決議:
先創建一個哨兵位的節點,用來連接下來進行連接l1和l2的節點

如果l1指標指向的節點小于l2指標指向的節點,那么l1指標指向的節點連接在新鏈表的后面,并且l1的指標走一步;
否則l2指標指向的節點連接新鏈表的后面,l2的指標走一步;
回圈條件是l1,l2都不為NULL
當有其中有一個是NULL,則跳出回圈,并且將剩下的鏈表連接到新鏈表

最后將guard這個節點銷毀掉,回傳新鏈表的第一節點:
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){
if(l1==NULL)//如果l1為空,則回傳l2
{
return l2;
}
if(l2==NULL)
{
return l1;
}
struct ListNode* guard=NULL;
struct ListNode* tail=NULL;
guard=tail=(struct ListNode*)malloc(sizeof(struct ListNode));//創建哨兵位節點
while(l1&&l2)
{
if(l1->val<l2->val)//連接l1的節點
{
tail->next=l1;
l1=l1->next;
}
else//連接l2的節點
{
tail->next=l2;
l2=l2->next;
}
tail=tail->next;
}
if(l1==NULL)//連接剩下的節點
{
tail->next=l2;
}
if(l2==NULL)
{
tail->next=l1;
}
struct ListNode* head=guard->next;
free(guard);//銷毀哨兵位
guard=NULL;
return head;//回傳第一個節點
}
上一篇: 力扣Leetcode142:環形鏈表 ||(看完你就會懂的思路).
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/279629.html
標籤:其他
下一篇:最短路問題的各種求法(一)
