风雨雾凇 风雨雾凇
首页
  • 服务端

    • golang
  • 其他

    • leetcode
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

风雨雾凇

技术小渣渣
首页
  • 服务端

    • golang
  • 其他

    • leetcode
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • golang

  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • leetcode

    • 两数之和-1
    • 无重复字符的最长子串-3
    • 整数翻转-7
    • 回文数-9
    • 13-罗马数字转整数
    • 最长公共前缀
    • 3Sum
    • Valid Parentheses
    • Merge Two Sorted Lists
      • Remove Duplicates from Sorted Array
      • Remove Element
      • Implement strStr()
      • Search Insert Position
      • Count and Say
      • 字符串相乘
      • Maximum Subarray
      • Length of Last Word
      • Plus One
      • Add Binary
      • Sqrt(x)
      • 翻转字符串里的单词
      • 字符串的排列
    • 机器学习

    • 技术
    • leetcode
    风雨雾凇
    2020-01-27
    目录

    Merge Two Sorted Lists

    # 题目

    Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
    
    Example:
    Input: 1->2->4, 1->3->4
    Output: 1->1->2->3->4->4
    
    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/merge-two-sorted-lists
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 解答思路

    遍历即可,注意参数校验。

    # 代码

    //Definition for singly-linked list.
    type ListNode struct {
    	Val  int
    	Next *ListNode
    }
    
    // 循环遍历合并即可
    func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
    	// 参数健壮性编写
    	if l1 == nil {
    		return l2
    	}
    	if l2 == nil {
    		return l1
    	}
    	var mergeList *ListNode
    	var currentNode *ListNode
    	// 选取头结点 复用 l1 l2 地址
    	if l1.Val < l2.Val {
    		mergeList = l1
    		l1 = l1.Next
    	} else {
    		mergeList = l2
    		l2 = l2.Next
    	}
    	currentNode = mergeList
    
    	for {
    		// 退出循环条件
    		if l1 == nil {
    			currentNode.Next = l2
    			break
    		}
    		if l2 == nil {
    			currentNode.Next = l1
    			break
    		}
    		// 比较大小
    		if l1.Val < l2.Val {
    			currentNode.Next = l1
    			l1 = l1.Next
    			currentNode = currentNode.Next
    			continue
    		}
    		currentNode.Next = l2
    		currentNode = currentNode.Next
    		l2 = l2.Next
    	}
    	return mergeList
    }
    
    func TestMergeTwoLists(t *testing.T) {
    	l5 := &ListNode{16, nil}
    	l4 := &ListNode{8, l5}
    	l3 := &ListNode{4, l4}
    	l2 := &ListNode{2, l3}
    	l1 := &ListNode{1, l2}
    
    	ll3 := &ListNode{6, nil}
    	ll2 := &ListNode{3, ll3}
    	ll1 := &ListNode{1, ll2}
    	res := mergeTwoLists(l1, ll1)
    	for {
    		if res == nil {
    			break
    		}
    		fmt.Printf("=>%v", res.Val)
    		res = res.Next
    	}
    }
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    编辑 (opens new window)
    #面试#学习笔记#leetcode
    上次更新: 2023/02/17, 16:53:03
    Valid Parentheses
    Remove Duplicates from Sorted Array

    ← Valid Parentheses Remove Duplicates from Sorted Array→

    最近更新
    01
    builtin
    02-12
    02
    导读
    02-12
    03
    13-罗马数字转整数
    01-30
    更多文章>
    Theme by Vdoing | Copyright © 2017-2023 风雨雾凇 | 粤ICP备16018321号-2
    博客内容遵循署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式