leetcode记录(二)

在这里继续刷leetcode。
为了保证效率,在这里主要刷链表题,并且做总结,
从最简单的链表题开始

什么是链表

单向链表类似于火车,有一个火车头,火车头会连接一个节点,节点上有乘客,并且这个节点会连接下一个节点,以此类推。

  • 链表的火车结构

在这里插入图片描述
链表的数据结构

head 属性作为(指针)指向链表的第一个节点。
链表中的最后一个节点指向 null。 当链表中一个节点也没有的时候,head 直接指向 null。
在这里插入图片描述

需要注意的点

注意,在链表题目当中,所有的head都是一个指针通过操控指针的方式来对整条链表循环遍历。
传head不代表传整个链表,而是传一个指针,任何链表当中的复制例如(cur=head)都是复制一个指针,来对原数据进行操作,再通过head这个没有改变的指针来返回原数据。
在此之前有些人会有误解,以为传head中的cur为什么复制后还会对引用数据影响,因为在这里复制的是指针,而不是整个数据
另外head指向当前节点,next指向下一个节点,知道这些就可以开始做题了。

题目

1.反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
在这里插入图片描述
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
示例 2:

在这里插入图片描述
输入:head = [1,2] 输出:[2,1]
示例 3:
输入:head = [] 输出:[]

解答

在这里通过

题目2 合并链表

请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。

题目数据保证需要删除的节点 不是末尾节点 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/delete-node-in-a-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
在这里插入图片描述
这里主要考虑用递归的方式,递归总共分为两个过程,一个叫递,在的过程当中,一直存放在栈当中,栈是先进后出,直到遇到终止条件开始把结果return给next。

var mergeTwoLists = function(list1, list2) {
      if (list1==null) {
        return l2;
      }else if(list2 === null){
        return l1;
      }
      if(l1.val < l2.val) {
        l1.next = mergeTwoLists(l1.next, l2);
        return l1;}
        else{
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }


};

两个链表相互判定,谁小就拿谁当头
在这里插入图片描述
这里传进去的链表,还是要注意head是头节点,以及当最后一个返回的时候,其实是返回整个节点

题目3:删除链表的节点
在这里插入图片描述

注意条件,如果目标节点在头,应该直接返回链表的下个节点,接下来判定,如果找到要去掉的节点,就直接next.next,然后返回

分隔链表

在这里插入图片描述
这一道题,通过遍历左右两个节点.形成两个子串,再拼接再一起
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值