leetcode之21合并两个有序链表Golang
这道题很简单,只需要从头开始遍历两个链表,每次将两个链表的当前元素比较,值较小的结点就存入到新的链表
需要注意的是加入新表是l3,旧表是l1,l2,那么将旧的表结点插入新的表的时候需要如下方式
l3.Next=l1
l3=l3.Next
而不能是
l3=l1
l3=l3.Next
这两种方式的区别是前一种方式是改变当前结点的Next的值,这样才能构成一个新的链表
后一种方式改变了当前的结点,但是他上一个结点的Next却并没有指向当前这个结点,所以不能够构成一个新的链表
代码很简单,如下:
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
l3 := &ListNode{}
resList := l3
for l1 != nil || l2 != nil {
if l1 == nil {
l3.Next = l2
l2 = l2.Next
} else if l2 == nil {
l3.Next = l1
l1 = l1.Next
} else {
if l1.Val <= l2.Val {
l3.Next = l1
l1 = l1.Next
} else {
l3.Next = l2
l2 = l2.Next
}
}
l3 = l3.Next
}
return resList.Next
}
浙公网安备 33010602011771号