Leetcode 每日一题练习 ------ 2181. 合并零之间的节点

Leetcode 每日一题练习继续讨论:

我每日都在论坛发帖讲解一道Leetcode题目,如果对你有所帮助,可以帮我点个认可(点击我的头像, 点击认可, 选择 算法 (如果可以还可以帮我点个你觉得符合的)板块),感谢各位佬友的支持 :kissing_heart:

2181. 合并零之间的节点
2181. Merge Nodes in Between Zeros

题解

本题要将0分隔的链表中两个0之间的数字求和合并为一个节点, 并删掉0节点, 则可以遍历链表, 遇到0记录起始0的节点指针, 对后面的非0数字求和, 再次遇到0则用和替换起始0节点的值, 并将这个节点的Next指针指向新遇到的0, 将新遇到的0设为起始0, 如此反复. 注意当出现连续0时, 直接忽视, 按照前述方法正常求和即可.

代码

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func mergeNodes(head *ListNode) *ListNode {
    var startzero *ListNode
    tempsum := 0
    var current *ListNode
    for current=head;current.Next!=nil;current=current.Next{
        if current.Val == 0{
            if startzero == nil{
                startzero = current
                continue
            }else if tempsum != 0{
                startzero.Val = tempsum
                startzero.Next = current
                startzero = current
                tempsum = 0
            }
        }else{
            tempsum += current.Val
        }
    }
    if tempsum != 0{
        startzero.Val = tempsum
        startzero.Next = nil
    }
    return head
}
1 个赞

刷题佬!

1 个赞

From 算法 to 开发调优