题目链接:
分析:链表的经典问题,不管是算法初学者还是考研手撕代码都很有可能考,大家一定要重点掌握这一部分!
算法思路:这种题目的思路很简单,就是题目中给出的链表依次比较 ,找出最小的元素接在你所要的结点的后面,依次循环,直到有一个链表为空,此时再将不空的链表接在你处理过的链表的后面。这里要注意,为了写出更具一般性的代码,通常我们都会自己设置一个头结点,方便统一处理。
参考代码:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* head=new ListNode(-1);//开辟一个头结点,方便进行统一的操作
ListNode* temp=head;//设置一个指针指向头结点
while(list1!=nullptr&&list2!=nullptr){//两个链表都不为空
if(list1->val<list2->val){//list1的值比较小
temp->next=list1;//temp指向list1的结点
temp=list1;//list1赋值给temp
list1=list1->next;//list1向后移
}else{//相反的情况
temp->next=list2;
temp=list2;
list2=list2->next;
}
}
if(list1==nullptr)//循环结束以后 说明至少有一个链表已经为空 此时进行判断 若list1已经为空
temp->next=list2;//则将list2的部分直接接到后面
else
temp->next=list1;
return head->next;//因为当时新开的结点不符合条件 所以需要返回该结点的下一个结点
}
};