焦虑不会消除明天的悲伤 只会让你今天的力量荡然无存
本章的内容是力扣每日随机一题的部分方法的解析
提示:以下是本篇文章正文内容,下面案例可供参考
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
21. 合并两个有序链表 link
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) { struct ListNode* head=NULL; struct ListNode* tail=NULL; if(list1==NULL)//判断是否是空链表 return list2; if(list2==NULL)//判断是否是空链表 return list1; while(list1&&list2) { if(list1->valval) { if(tail==NULL) { head=tail=list1; } else { tail->next=list1; tail=tail->next; } list1=list1->next; } else { if(tail==NULL) { head=tail=list2; } else { tail->next=list2; tail=tail->next; } list2=list2->next; } } if(list1) { tail->next=list1; } if(list2) { tail->next=list2; } return head; }
要注意判断list1和;ist2是否是空链表
要考虑第一次插入的情况是没有结点的
所谓带哨兵位的链表,就是一个附加的链表的节点,该节点作为第一个节点,它的值域并不存储任何东西,只是为了操作的方便引用的。
如果一个链表有哨兵节点的话,那么线性表的第一个元素应该是链表的第二个节点.
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) { struct ListNode* head=NULL; struct ListNode* tail=NULL; head=tail=(struct ListNode*)malloc(sizeof(struct ListNode)); if(list1==NULL) return list2; if(list2==NULL) return list1; while(list1&&list2) { if(list1->valval) { tail->next=list1; tail=tail->next; list1=list1->next; } else { tail->next=list2; tail=tail->next; list2=list2->next; } } if(list1) { tail->next=list1; } if(list2) { tail->next=list2; } struct ListNode* del=head; head=head->next; free(del); del=NULL; return head; }
Ending,今天的力扣每日一题内容就到此结束啦,如果后续想了解更多,就请关注我吧。
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者