链表
Vaccy Zhu
自律是解决人生问题最主要的工具,也是解决人生痛苦最重要的方法!
展开
-
删除链表的中间节点-链表2095-c++
实际上可以用快慢指针,一次遍历即可。原创 2024-03-31 14:32:23 · 116 阅读 · 0 评论 -
复制带随机指针的链表-链表138-python&c++
算法思想哈希表Mydic映射原有节点->新的节点原节点为空,则返回空原节点在哈希表中可以找到,则说明新的节点已生成,直接返回根据原有节点的值,创建新的节点root = Node(node.val)将原有节点和新节点的对应关系添加到哈希表中Mydic[node] = root最后参照原节点的next和random关系,创建新的next和random节点给新节点root递归整个过程python# Definition for a Node.class Node: def _原创 2021-08-29 10:11:58 · 92 阅读 · 1 评论 -
合并k个升序链表-链表23-python&c++
归并思想,两两合并链表python# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def merge(self, head1, head2): pre = curr = ListNode(100)原创 2021-08-16 13:31:50 · 102 阅读 · 1 评论 -
删除排序链表中的重复元素 II-链表82-python
python# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def deleteDuplicates(self, head: ListNode): if not head: r原创 2021-08-15 21:24:26 · 67 阅读 · 0 评论 -
反转链表II-链表92-python
python# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def reverse(self, head): if not head: return head原创 2021-08-15 21:02:59 · 60 阅读 · 0 评论 -
排序链表-链表148-python&c++
算法思想考察合并两个有序链表和将链表平均拆分成两组(归并需要),再利用归并思想进行排序即可。python# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def merge(self, head1, he原创 2021-08-01 20:36:48 · 121 阅读 · 1 评论 -
设计链表-链表707-C++
算法思想:没看答案,用单链表实现的,考察的是对链表的增删插入基本操作。C++class MyLinkedList {private: struct ListNode{ int val; ListNode* next; ListNode(int a, ListNode* next) : val(a), next(next){}; ListNode(int a) : val(a), next(nullptr){}; };原创 2021-04-06 19:32:23 · 54 阅读 · 0 评论 -
移除链表元素-链表203-C++&python
算法思想:没看答案:先声明哨兵节点pre防止head头节点的值等于val的情况;声明快慢指针slow和fast,当fast不等于val时,slow = fast, fast前进到fast->next;当fast等于val时,slow->next等于fast->next,slow不前进,fast前进到fast->next。最后返回pre->next即可。C++/** * Definition for singly-linked list. * struct原创 2021-04-06 19:30:48 · 95 阅读 · 0 评论 -
环形链表II-链表142-c++
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* cycle(ListNode* head){ if(head == nullptr) r.原创 2021-03-24 16:19:13 · 92 阅读 · 1 评论 -
重排链表-链表143-C++
算法思想:线性表:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x),原创 2021-03-23 12:49:41 · 103 阅读 · 0 评论 -
链表的中间节点-链表876-C++
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* middleNode(ListNode* head) { if(head == nullptr) r原创 2021-03-23 12:19:55 · 114 阅读 · 0 评论 -
链表中倒数第k个节点-链表(剑指offer22)-C++
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */class Solution {public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pHead ListNode类 * @param原创 2021-03-23 11:55:11 · 85 阅读 · 0 评论 -
环形链表-链表141-c++
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: bool hasCycle(ListNode *head) { if(!head || !head->next).原创 2021-03-18 14:39:16 · 92 阅读 · 1 评论 -
K个一组翻转链表-链表25-c++
算法思想:链表分区为已翻转部分+待翻转部分+未翻转部分每次翻转前,要确定翻转链表的范围,这个必须通过 k 此循环来确定需记录翻转链表前驱和后继,方便翻转完成后把已翻转部分和未翻转部分连接起来初始需要两个变量 pre 和 end,pre 代表待翻转链表的前驱,end 代表待翻转链表的末尾经过k此循环,end 到达末尾,记录待翻转链表的后继 next = end.next翻转链表,然后将三部分链表连接起来,然后重置 pre 和 end 指针,然后进入下一次循环特殊情况,当翻转部分长度不足 k 时原创 2021-03-18 14:14:52 · 200 阅读 · 1 评论 -
奇偶链表-链表328-python&C++
Python没看答案不理解的可以画图,按步骤用图解去理解。但该方法在OJ上效果很差。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def oddEvenList(self, head): le原创 2021-02-14 22:30:08 · 115 阅读 · 1 评论 -
两数相加II-链表445
Python没看答案。先将两个链表反转;按照leetcode第2题两数相加的方法相加两个链表;将相加后的链表反转,得到输出。# Definition for singly-linked list.# class ListNode:# def __init__(self, x):# self.val = x# self.next = Noneclass Solution: def addTwoNumbers(self, l1, l2):原创 2021-02-14 21:16:25 · 64 阅读 · 0 评论 -
两两交换链表中的节点-链表24-python&c++
Python不懂就画图,将不同步骤的操作展现出来。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def swapPairs(self, head): pre = ListNode(100,head原创 2021-02-14 17:57:28 · 84 阅读 · 1 评论 -
删除链表的倒数第N个节点-链表19-python&c++
Python一、暴力法:由于删除倒数第n个节点就等同于将链表反转后删除正数第n个节点,所以先将链表反转;然后删除正数第n个节点;再将删除操作后的链表顺序反转,即返回到最初链表的顺序。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass S原创 2021-02-14 17:34:44 · 132 阅读 · 1 评论 -
回文链表-链表234-python&C++
Python将链表的值复制到数组中,然后用双指针法判断数组是不是回文数组。# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def isPalindrome(self, head): ls原创 2021-02-14 14:32:40 · 14 阅读 · 1 评论 -
删除排序链表中的重复元素-链表83-python&C++
Python算法:这是一个简单的问题,仅测试你操作列表的结点指针的能力。由于输入的列表已排序,因此我们可以通过将结点的值与它之后的结点进行比较来确定它是否为重复结点。如果它是重复的,我们更改当前结点的 next 指针,以便它跳过下一个结点并直接指向下一个结点之后的结点。这是我不看答案而做独立出来的第一个链表题,梦开始的地方!# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, ne原创 2021-02-14 11:54:32 · 77 阅读 · 0 评论 -
链表算法题解题注意事项
在leetcode上刷链表高频题后总结出的解题注意事项:链表题基本都是对指针和遍历的理解,所以一定要掌握概念和学会运用。链表类python定义:class ListNode(): def __init__(self, val=0, next=None): self.val = val # 值 self.next = next # 指向下一个节点的指针声明链表可以用curr=head=ListNode(),head用于返回各种操作后的整个链表,curr用于跟随指针遍历(详见pytho原创 2021-02-13 17:41:14 · 203 阅读 · 1 评论 -
合并两个有序链表-链表21-python&C++
Python思路我们可以用迭代的方法来实现上述算法。当 l1 和 l2 都不是空链表时,判断 l1 和 l2 哪一个链表的头节点的值更小,将较小值的节点添加到结果里,当一个节点被添加到结果里之后,将对应链表中的节点向后移一位。算法首先,我们设定一个哨兵节点 prehead ,这可以在最后让我们比较容易地返回合并后的链表。我们维护一个 prev 指针,我们需要做的是调整它的 next 指针。然后,我们重复以下过程,直到 l1 或者 l2 指向了 null :如果 l1 当前节点的值小于等于 l2 ,我原创 2021-02-13 17:15:59 · 44 阅读 · 1 评论 -
两数相加-链表2-python&c++
python考察的是对链表的操作:# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:原创 2021-02-04 23:09:40 · 72 阅读 · 1 评论 -
反转链表-链表206-python&c++
python# Definition for singly-linked list.class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = nextclass Solution: def reverseList(self, head): pre = None cur = head while cur原创 2021-02-10 23:02:31 · 103 阅读 · 1 评论 -
相交链表-链表160-python&c++
Python双指针法:创建两个指针 pA 和 pB,分别初始化为链表 A 和 B 的头结点。然后让它们向后逐结点遍历;当 pA 到达链表的尾部时,将它重定位到链表 B 的头结点; 类似的,当 pB 到达链表的尾部时,将它重定位到链表 A 的头结点;若在某一时刻 pA 和 pB 相遇,则 pA(pB) 为相交结点;如果两个链表存在相交,它们末尾的结点必然相同。因此当 pA或pB 到达链表结尾时,记录下链表 A或B对应的元素。若最后元素不相同,则两个链表不相交。# Definition for原创 2021-02-13 15:28:14 · 124 阅读 · 1 评论