一.前言
嗨嗨嗨,大家好久不见!今天我在LeetCode看到了一道单链表题:https://leetcode.cn/problems/merge-two-sorted-lists想着和大家分享一下,废话不多说,让我们开始今天的题目分享吧。
二.正文
1.1题目描述
1.2题目分析
我们还是可以通过创建新链表的方法来解题:
1.首先我们创建新的单链表:ListNode* phead和ListNode* ptail分别作为新链表的头节点和尾节点。
2.其次我们再创建两个指针分别遍历上下两个链表:l1与l2。
3.如果l1小于或等于l2,那么将l1插入到我们的新链表中,并让l1移到下一个节点。
反之,那l2将插入到我们的新链表中,并让l2移到下一个节点。
需要注意的是如果phead初始是NULL的话,不论初始l1和l2谁大谁小都要让phead和ptail等于它们与之相对应的头节点。
例如:如果此时l1小于或等于l2,且phead=NULL。那摩就让phead=ptail=l1。
同理,反之,phead=ptail=l2。
1.3代码实现
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) { if(list1==NULL) return list2; if(list2==NULL) return list1; ListNode* l1=list1; ListNode* l2=list2; ListNode* phead; ListNode* ptail; phead=ptail=NULL; while(l1!=NULL&&l2!=NULL) { if((l1->val)<=(l2->val)) { if(phead==NULL) { phead=ptail=l1; l1=l1->next; } else { ptail->next=l1; ptail=ptail->next; l1=l1->next; } } else { if(phead==NULL) { phead=ptail=l2; l2=l2->next; } else{ ptail->next=l2; ptail=ptail->next; l2=l2->next; } } } if(l1==NULL) ptail->next=l2; if(l2==NULL) ptail->next=l1; return phead; }
值得注意的是:我们的while结束条件中有两种结束情况:l1=NULL或l2=NULL这两种情况。
当l1=NULL的时候说明l1链表中的元素已经全部插入到新链表中了了,但是l2中的元素还没有插入完,这时候就需要我们在最后让l2中没插入的数据直接插入到新链表后面。
同理,当l2=NULL的时候说明l2链表中的元素已经全部插入到新链表中了了,但是l1中的元素还没有插入完,这时候就需要我们在最后让l1中没插入的数据直接插入到新链表后面。
三.结言
今天的题目分享就到这了,同学们我们下期再见。
还没有评论,来说两句吧...