题目一描述:

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

提示:

  • 每个链表中的节点数在范围 [1, 100]
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

解决思路:

设Carry变量用于记录位数相加的进位结果,

同时遍历两个链表,每次遍历两个链表时,根据链表节点与Carry值生成新节点。

实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func ListNodeAdd(l1 *ListNode,l2 *ListNode){

dummy:=&ListNode{} //哨兵结点
cur:=dummy

carry:=0 //进位

for l1!=nil || l2!=nil || carry!=0{
if l1!=nil{
carry += l1.Val
l1=l1.Next
}
if l2!=nil{
carry+=l2.Val
l2=l2.Next
}
cur.Next=&ListNode{Val: carry%10}
carry=carry/10
cur=cur.Next
}
return dummy.Next
}

问题二描述:

给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。

提示:

  • 0 <= s.length <= 5 * 104
  • s 由英文字母、数字、符号和空格组成