你今天学算法了吗? 打卡第五天

 


目录

 一、题目

1、题目描述

2、基础框架

3、原题链接

二、解题报告

1、思路分析

2、时间复杂度

3、代码详解

三、本题小知识


 一、题目


1、题目描述

  

给你一个链表的头节点 head ,该链表包含由 0 分隔开的一连串整数。链表的 开端 和 末尾 的节点都满足 Node.val == 0

对于每两个相邻的 0 ,请你将它们之间的所有节点合并成一个节点,其值是所有已合并节点的值之和。然后将所有 0 移除,修改后的链表不应该含有任何 0 。

 返回修改后链表的头节点 head 。

示例 1:
 

输入:head = [0,3,1,0,4,5,2,0]
输出:[4,11]
解释:
上图表示输入的链表。修改后的链表包含:
- 标记为绿色的节点之和:3 + 1 = 4
- 标记为红色的节点之和:4 + 5 + 2 = 11

示例 2:
 

输入:head = [0,1,0,3,0,2,2,0]
输出:[1,3,4]
解释:
上图表示输入的链表。修改后的链表包含:
- 标记为绿色的节点之和:1 = 1
- 标记为红色的节点之和:3 = 3
- 标记为黄色的节点之和:2 + 2 = 4
 

提示:

列表中的节点数目在范围 [3, 2 * 105] 内
0 <= Node.val <= 1000
不 存在连续两个 Node.val == 0 的节点

2、基础框架

   Java 版本给出的基础框架代码如下:   

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeNodes(ListNode head) {

    }
}

 

3、原题链接

    LeetCode 2181. 合并零之间的节点

二、解题报告


1、思路分析

新建链表装入新的节点值

遇到0跳过,结点后移,不为0,则值累加赋给新的结点的值

详见看代码!!!


2、时间复杂度

空空空,学会了补


3、代码详解

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeNodes(ListNode head) {
     //定义并初始化结果链表
      ListNode ret = new ListNode(0);
      //记录头结点
      ListNode ans = ret;
      //定义用于遍历的结点
      ListNode find=head;
      //若链表为空则返回空
      if(head==null){
          return null;
      }
      //开始遍历,临界条件为最后以个结点
      while(find.next != null){
          //查找结点值为0的
          if(find.val==0){
            //跳过当前结点
            find=find.next;
            //创建一个新的结果结点来存储0——0之间的结点值得和
            ret.next = new ListNode(0);
            //移动结果结点
            ret=ret.next;
            //结束本次循环,重复操作
            continue;
          }else{
              //结点值不为0,则累加存入
              ret.val += find.val;
          }
          //结点后移继续查找
          find=find.next;
      }
      return ans.next;
    }
}

三、本题小知识

  链表,数据结构

猜你喜欢

转载自blog.csdn.net/qq_43846797/article/details/124334615
今日推荐