目录
一、题目
1、题目描述
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;
}
}
三、本题小知识
链表,数据结构