课程名称:JavaScript版数据结构与算法
课程章节:第5章 数据结构之“链表”
主讲老师:lewis
课程内容:
今天学习的内容包括:
5-4 LeetCode:2. 两数相加——通过链表计算两数相加。
5-5 LeetCode:83. 删除排序链表中的重复元素——因为是排序链表,通过while循环判断p跟p.next是否相等,进行赋值即可。
5-6 LeetCode:141. 环形链表——设置两个指针一快一慢,看指针是否碰面。
课程收获:
两数相加
1、定义l3赋值给p3
2、进行while处理
3、抛出l3
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
const l3 = new ListNode(0)
let p1 = l1
let p2 = l2
let p3 = l3
let carry = 0
while (p1 || p2){
const v1 = p1 ? p1.val : 0
const v2 = p2 ? p2.val : 0
const val = v1 + v2 + carry
carry = Math.floor(val / 10)
p3.next = new ListNode(val % 10)
if(p1) p1 = p1.next
if(p2) p2 = p2.next
p3 = p3.next
}
if(carry){
p3.next = new ListNode(carry)
}
return l3.next
};
删除排序链表中的重复元素
1、因为是排序链表,通过while循环判断p跟p.next是否相等
2、对p.next = p.next.next p = p.next赋值即可
/**
* @param {ListNode} head
* @return {ListNode}
*/
var deleteDuplicates = function(head) {
let p = head
while(p && p.next){
if(p.val === p.next.val){
p.next = p.next.next
}else{
p = p.next
}
}
return head
};
环形链表
1、设置一快一慢两个指针
2、对指针进行循环,看两个指针是否再次遇到
/**
* @param {ListNode} head
* @return {boolean}
*/
var hasCycle = function(head) {
let p1 = head
let p2 = head
while(p1 && p2 && p2.next){
p1 = p1.next
p2 = p2.next.next
if(p1 === p2){
return true
}
}
return false
};
针对最近的学习,刚开始时感觉很容易,慢慢的感觉有点吃力了,还是先跟着老师的节奏接着学习,看看能不能慢慢的理解,对自己说一句,加油😀~
坚持打卡,坚持学习!明天见💪~