简述企业网站维护的重要性,平面设计图数字标识,购物网站建设技术难点,网站制作步骤尾插 核心思路#xff1a;依次比较 #xff0c;取经过比较后较小值进行尾插 cur1 指向list1 ,cur 2指向list2 ,当cur1走完list1 或者cur2 走完list2 后停止 如果cur1走完list1 ,可以将cur2 整个拿下来尾插 如果cur2走完list2 ,可以将cur1 整个拿下来尾插 特殊情况 #xff1…尾插 核心思路依次比较 取经过比较后较小值进行尾插 cur1 指向list1 ,cur 2指向list2 ,当cur1走完list1 或者cur2 走完list2 后停止 如果cur1走完list1 ,可以将cur2 整个拿下来尾插 如果cur2走完list2 ,可以将cur1 整个拿下来尾插 特殊情况 如果list1 是空链表 返回 list2 如果list2 是空链表 返回 list1 struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{struct ListNode*tail NULL ;struct ListNode* cur1 list1 ;struct ListNode* cur2 list2;struct ListNode* head NULL;//空链表if(list1 NULL){return list2 ;}if( list2 NULL){return list1 ;}//非空链表//依次比较 while ( cur1 cur2) //其中一个链表走完了就结束循环{if( cur1-val cur2-val) //list1 list2{//尾插if ( head NULL) {head tail cur1 ;}else {tail-next cur1 ;tail tail-next ;}cur1 cur1-next ;}else {if ( head NULL) {head tail cur2 ;}else {tail-next cur2 ;tail tail-next ;}cur2 cur2-next ;}}if( cur1) //cur2已经走完list2 直接将cur1整个拿下来尾插{tail-next cur1 ;} if( cur2) //cur1已经走完list1 直接将cur2整个拿下来尾插{tail-next cur2 ;} return head ;
}哨兵位头节点 哨兵位头节点 是一个附加的链表节点.该节点作为第一个节点,它的数据域不存储任何东西 只是为了操作的方便而引入的 如果一个链表有哨兵节点的话那么线性表的第一个元素应该是链表的第二个节点 也就是说返回这个链表应该返回哨兵位的next因为哨兵位的next才是有效的真实的头节点 要注意使用完哨兵位头节点后对其进行释放避免内存泄漏 哨兵位头节点相比较上面的解法 不需要判断tail是否为空 tail 不会为空 struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{struct ListNode* guard (struct ListNode*)malloc( sizeof(struct ListNode)); struct ListNode* tail guard ;struct ListNode* cur1 list1 ;struct ListNode* cur2 list2 ;tail-next NULL ;while ( cur1 cur2) //两个链表都不为空{//尾插 if( cur1-val cur2-val){tail-next cur1 ;cur1 cur1-next ; tail tail-next ;}else {tail-next cur2 ;cur2 cur2-next ; tail tail-next ; }} // cur1 走完list1 if( cur2){tail-next cur2 ;}if( cur1) // cur2 走完list2 {tail-next cur1 ;} struct ListNode* head guard-next ; return head ;free(guard);//要注意使用完哨兵位头节点后对其进行释放避免内存泄漏}如果你觉得这篇文章对你有帮助不妨动动手指给点赞收藏加转发给鄃鳕一个大大的关注 你们的每一次支持都将转化为我前进的动力