LeetCode-链表
LeetCode-链表
欢脱的婷子
每天努力一点点!
展开
-
剑指offer -- 复杂链表的复制
leetcode链接:https://leetcode-cn.com/problems/fu-za-lian-biao-de-fu-zhi-lcof/请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节点,还有一个 random 指针指向链表中的任意节点或者 null。示例 1:输入:head = [[7,null],[13,0],[11,4],[10,2],[1,0]]输出:[[7,null],[13,0],[11,原创 2020-08-02 09:19:16 · 95 阅读 · 0 评论 -
LeetCode # 328 链表元素按奇偶聚集
给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL示例 2:输入: 2->1->3->5->6-原创 2020-05-16 18:20:19 · 204 阅读 · 0 评论 -
LeetCode # 725 分隔链表
给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 // 5 结果 [ [1], [2], [3], [4], null ]示例 1:输入:root = [1,原创 2020-05-16 12:14:45 · 157 阅读 · 0 评论 -
LeetCode # 234 回文链表
判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true解题思路1:将链表放在一个数组里,因为数组具有随机访问的特点,所以可以采用数组来比较是否是回文链表。class Solution { public boolean isPalindrome(ListNode head) { List<Integer> array = new ArrayL原创 2020-05-16 11:01:40 · 84 阅读 · 0 评论 -
LeetCode # 445 两数相加 II
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 8 -> 0 -> 7解题思路: 使用两个栈,将两个链表存起来,然后再依次取出进行相加,采用头插法把相加的结果插入链表,返回。class Solutio原创 2020-05-15 12:24:15 · 104 阅读 · 0 评论 -
LeetCode #24 交换链表中的相邻结点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例:给定 1->2->3->4你应该返回 2->1->4->3解题思路1:迭代,循环链表,设置一个pre指针指向要交换的两个节点的first节点的前驱节点,当pre后面两个节点均不为null时,交换这两个节点,最后返回。这样同时可以满足链表节点数为奇数和偶数两种情况。class Solution { public L原创 2020-05-12 09:15:00 · 452 阅读 · 0 评论 -
LeetCode #19 删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.解题思路1:两次遍历链表,第一次遍历求出链表的长度l,然后再遍历一次,找到第l-n个节点,将此节点的next指向下一个节点的next,实现删除该节点的后一个节点,即倒数第n个节点。(设置一个头指针,防止链表中只有一个节点的情况)class Solut..原创 2020-05-11 09:29:48 · 140 阅读 · 0 评论 -
LeetCode #83 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3解题思路1:直接遍历链表进行比较,设置一个cur指向当前比较的节点,若cur与cur.next的值相同,则cur.next = cur.next.next,否则,后移cur。class Solution { public ListNo..原创 2020-05-10 09:47:35 · 113 阅读 · 0 评论 -
LeetCode #21 合并两个有序链表(两种解法)
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4解题思路1: 暴力法,设一个pre指针,然后设两个指针,分别遍历比较两个链表当前值的大小,将较小值加入pre后,移动pre指针,直到两个链表其中一个遍历完毕,再将剩下的那个加入到排序列表的后面。class Solution { public List原创 2020-05-09 15:22:16 · 366 阅读 · 0 评论 -
LeetCode #206 反转链表(三种解法)
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题思路1:采用头插法,遍历原有链表进行反转。class Solution { public ListNode reverseList(ListNode head) { ListNode result = new ListNode(-999); while(head !=原创 2020-05-09 10:30:15 · 211 阅读 · 0 评论 -
LeetCode #160 相交链表
编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为原创 2020-05-09 09:05:45 · 87 阅读 · 0 评论