从Leetcode 每日一题练习继续讨论:
我每日都在论坛发帖讲解一道Leetcode题目,如果对你有所帮助,可以帮我点个认可(点击我的头像, 点击认可, 选择 算法 (如果可以还可以帮我点个你觉得符合的)板块),感谢各位佬友的支持
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
}