开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第30天,点击查看活动详情 这也是第35篇文章
链表中的两数相加
题目
给定两个 非空链表 l1和 l2 来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
可以假设除了数字 0 外,这两个数字都不会以零开头。
思路
将两个链表中的加数的每一位分别入栈,之后每次都记录当前相加结果(值为cur,结点为tmp)以及进位(carry),然后将结果链表相连(tmp.next=cur;res=tmp;)
代码
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
Deque<Integer> s1=new ArrayDeque<>();
Deque<Integer> s2=new ArrayDeque<>();
ListNode n1=l1;
ListNode n2=l2;
ListNode res=null;
while(n1!=null){
s1.push(n1.val);
n1=n1.next;
}
while(n2!=null){
s2.push(n2.val);
n2=n2.next;
}
int carry=0;
while(!s1.isEmpty()||!s2.isEmpty()||carry!=0){
int num1=s1.isEmpty()?0:s1.pop();
int num2=s2.isEmpty()?0:s2.pop();
int cur=num1+num2+carry;
carry=cur/10;
cur=cur%10;
ListNode tmp=new ListNode(cur);
tmp.next=res;
res=tmp;
}
return res;
}
}
链表中环的入口结点
题目
给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。
为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。
说明: 不允许修改给定的链表。
思路
找出被重复遍历的结点就返回。
而查重可以利用set的特性,它不含重复元素,且可以用它的contains()方法。
代码
public class Solution {
public ListNode detectCycle(ListNode head) {
HashSet<ListNode> set=new HashSet<>();
ListNode node=head;
while(node!=null){
if(set.contains(node)) return node;
else{
set.add(node);
}
node=node.next;
}
return null;
}
}
写在文末的碎碎念
今天一天都在重做6.s081中之前做过的内容,但是之前已经写过文章了,所以这块内容不能再写。但是又给自己定了硬性指标,每天都要有东西写,没办法,就回顾一下这几天做的几道题吧。