数据结构与算法02-链表
链表
aolaf
这个作者很懒,什么都没留下…
展开
-
05 删除排序链表中的重复元素(leecode 83)
1 问题给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->32 解法链表去重,快慢指针法。最后将slow后面的节点断开。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *n原创 2021-03-23 21:46:53 · 79 阅读 · 0 评论 -
04 判断链表是否有环以及环入口位置(leecode 142)
1 问题给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。示例 2:输入:hea原创 2021-01-24 15:04:03 · 265 阅读 · 0 评论 -
03 反转链表(leecode 206)
1 问题反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL2 解法如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。只需要改变链表的next指针的指向,直接将链表反转 ,而不用重新定义一个新的链表。定义两个指针,其中pre初始指向NULL,cur指向head,由于需要改变cur的下个节点,因而还需定义一个中间节点tmp来保存cur的下个节点。步骤如原创 2021-01-24 11:36:48 · 92 阅读 · 0 评论 -
02 设计链表(leecode 707)
1 问题在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index原创 2021-01-24 10:23:59 · 110 阅读 · 0 评论 -
01 移除链表元素(leecode 203)
1 问题删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->52 解法2.1 分别处理头节点的删除与中间节点的删除case 1 头节点的删除步骤:(1)将中间变量指向要删除的节点ListNode *tmp = head;(2)将头节点向后移动一个head = head->next;(3)将中间变量删除(删除原先头节点)d原创 2021-01-23 16:42:01 · 97 阅读 · 0 评论 -
00 链表基础知识
1 链表的定义链表是一种通过指针串联在一起的线性数据结构,每一个节点由两部分组成,一个是数据域,一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针)。2 链表的类型2.1 单向链表单向链表中的节点只能指向节点的下一个节点。链接的入口点称为列表的头结点也就是head。2.2 双向链表每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。双链表 既可以向前查询也可以向后查询。2.3 循环链表循环链表,顾名思义,就是链表首尾相连。3 链表的存储原创 2021-01-23 11:13:23 · 437 阅读 · 0 评论