链表
链表相关
等不了天明
这个作者很懒,什么都没留下…
展开
-
009.旋转链表
题目: 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]输入:head = [0,1,2], k = 4输出:[2,0,1]思路: 通过数学观察发现,旋转链表实际上就是把倒数第k%n个结点及其以后的结点提前,然后在其末尾连上前面的结点。但是要注意如果k%n等于0则可以预先处理(即无移动),否则还要修改相应的代码。代码:/** * Definition for s原创 2021-05-19 23:40:05 · 47 阅读 · 0 评论 -
008.链表两数相加
题目: 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。例如:输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.思路: 这道题思路还是比较简单的,但是要注意进位和两个链表之间长度之间的差异。由于本人对链表的一些操作不太熟悉,导致代码好像很冗长(哭原创 2021-05-19 23:34:37 · 49 阅读 · 0 评论 -
007.合并两个有序链表
题目:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。题解1: 思路:设置一个哑结点用于链接新的链表。对于两个升序链表来说,分别利用两个指针来比较当前结点的值,将较小的值链接到新链表中(注意相等时取哪个在if语句中自行选择)。最后如果有哪个链表到尾了,则另外一个链表直接接上去即可。代码:/** * Definition for singly-linked list. * struct ListNode { * int val; *原创 2021-05-19 23:27:21 · 80 阅读 · 0 评论 -
006.回文链表
题目:请判断一个链表是否为回文链表。题解1(栈): 思路:看到这种之类的,首先就想到栈。这种方法思路很简单,就是把前面一段的链表放到栈中,然后将运动指针p指向另一段开头,然后两端不断比较即可。唯一要注意的点是链表长度奇偶时有不同处理。 但是,这种解法效率比较低。 补充:直接将链表全部压栈然后与原链表对比也可以,不用一定要两段进行比较。 Tip:stack.pop()返回的是void,并不能返回元素,要用stack.top()来返回头元素。/** * Definition for sin原创 2021-04-29 10:48:17 · 55 阅读 · 0 评论 -
005.奇偶链表
题目:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。题解1: 思路:总体的思路就是把这个链表分为奇数链表和偶数链表,然后再把这两个链表合起来(奇数链表要放在偶数链表前面)。 但是由于该题目中用到的指针比较多,终止条件的判断以及链表的连接都要注意。在做题的时候主要碰到的还是一个老问题,就是使用原创 2021-04-28 20:40:55 · 63 阅读 · 0 评论 -
004.移除链表元素
题目:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。题解1(双指针): 思路:首先,为了便于删除头结点,因此创建一个哑结点(leetcode称为哨兵结点)。然后利用前后指针(距离为1),遍历链表。如果curr指针指向的结点的值为给定值,此时prev正好指向前一个结点,curr为删除的结点。/** * Definition for singly-linked list. * struct ListNode原创 2021-04-28 19:35:32 · 47 阅读 · 0 评论 -
003.反转链表
题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。题解1(迭代): 思路:如1→2→3→∅,我们想要把它改成 ∅←1←2←3。则可以利用两个指针,一个保存前一个节点,一个保存后一个节点,然后将其倒序。但是我们要注意每次倒序之前,要利用一个指针变量保存原来的下一个结点,否则后续的链表将找不到。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode原创 2021-04-28 15:47:55 · 94 阅读 · 0 评论 -
002.删除链表的倒数第N个节点
题目:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。1.题解1(双指针): 思路:题目给出的链表是没有哑结点的,为了不单独讨论头结点的删除。我们可以手动new一个哑结点。 另外,我们可以设置两个指针p1和p2。两个指针都是从哑结点开始,p2先走n-1步,此时两个结点的距离就是n-1,有n个结点。然后,再让p1和p2两个指针一起走,直到p2到达末尾,此时p1所指向的结点就是倒数第n个结点了。(因为p1和p2的距离正好隔着n-1)。 Tip:注意delete相关结点,及时清理内原创 2021-04-28 12:25:17 · 123 阅读 · 0 评论 -
001.双指针的运用
1)链表中的双指针2)环形链表原创 2021-04-19 11:32:18 · 73 阅读 · 0 评论