【LeetCode】21. 合并两个有序链表(go语言实现)

📅 2026/7/28 14:49:31
【LeetCode】21. 合并两个有序链表(go语言实现)
文章目录一、题目描述二、题目分析三、代码实现一、题目描述将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例输入1-2-4,1-3-4输出1-1-2-3-4-4二、题目分析首先链表全部为有序链表不用考虑排序的问题现在只需要考虑比较链表元素和合并的问题只要依次从链表头比较两个链表中的元素大小然后放到新链表中即可可以重新创建新链表节点并返回一个新的链表空间也可以利用旧链表的节点改变指针指向组合成新链表注意的点输入可能全部为空局部变量初始化值大小的比较三、代码实现// leetcode_21. 合并两个有序链表// 欢迎继续优化代码/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */packagemainimportfmttypeListNodestruct{ValintNext*ListNode}// 初始化 ListNodefuncinitList(valint)*ListNode{returnListNode{val,nil}}// 追加 NodefuncappendNode(ln*ListNode,valint){tmp:lniftmpnil{tmpListNode{val,nil}return}fortmp.Next!nil{tmptmp.Next}tmp.NextListNode{val,nil}}// 追加 ListfuncappendNodeList(ln*ListNode,node*ListNode){tmp:lniftmpnil{tmpnodereturn}fortmp.Next!nil{tmptmp.Next}tmp.Nextnode}// 直接操作指针重新连接成所需 ListfuncmergeTwoLists(l1*ListNode,l2*ListNode)*ListNode{tmp1:l1 tmp2:l2 tmp3:new(ListNode)tmp3_tmp:tmp3fortmp1!niltmp2!nil{iftmp1.Valtmp2.Val{tmp3_tmp.Nexttmp1 tmp1tmp1.Next}else{tmp3_tmp.Nexttmp2 tmp2tmp2.Next}tmp3_tmptmp3_tmp.Next}iftmp1nil{tmp3_tmp.Nexttmp2}elseiftmp2nil{tmp3_tmp.Nexttmp1}returntmp3.Next}// 创建并返回新的链表funcmergeTwoLists1(l1*ListNode,l2*ListNode)*ListNode{tmp1:l1 tmp2:l2 tmp_val:0tmp3:new(ListNode)fortmp1!niltmp2!nil{iftmp1.Valtmp2.Val{tmp_valtmp1.Val tmp1tmp1.Next}else{tmp_valtmp2.Val tmp2tmp2.Next}appendNode(tmp3,tmp_val)}iftmp1nil{appendNodeList(tmp3,tmp2)}elseiftmp2nil{appendNodeList(tmp3,tmp1)}returntmp3.Next}// 打印结果func(ln*ListNode)printList(){fmt.Printf(list: )fortmp:ln;tmp!nil;tmptmp.Next{fmt.Printf(%d-,tmp.Val)}fmt.Printf(nil\n)}funcmain(){l1:initList(1)l2:initList(1)appendNode(l1,2)appendNode(l1,4)appendNode(l2,3)appendNode(l2,4)l1.printList()l2.printList()l3:mergeTwoLists(l1,l2)//l3 : mergeTwoLists(nil, nil)l3.printList()}运行结果list:1-2-4-nillist:1-3-4-nillist:1-1-2-3-4-4-nilProcess finished with exit code0——2019-09-01——