题目:来源于leetcode
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
代码:
class Solution {
public:
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
ListNode* head=new ListNode();
ListNode* add=head;
//我们只需比较两个链表指针都不为空的清空即可,因为一旦有个链表完成了遍历,就不用比较了,剩下的那个链表直接加上去就好啦。
while(list1!=nullptr&&list2!=nullptr){
if(list1->val<list2->val){
add->next=list1;
list1=list1->next;
}
else if(list2->val<=list1->val){
add->next=list2;
list2=list2->next;
}
add=add->next;
}
// 合并后 l1 和 l2 最多只有一个还未被合并完,将创造的链表末尾指向未合并完的链表即可
add->next=list1==nullptr?list2:list1;
return head->next;
}
};
总结:
链表的使用过程中,尤其是构造出来的新链表是其余链表的组合,不需要特别注意新链表的value,只需要注意next即可。因为一个->next是具有指向性的,它所指向的节点既有值也有指针。