
链表
Leetcode-链表
bulangman277
努力生活的普通大学生
展开
-
Leetcode 面试题 链表相交(浪漫相遇法)
题目描述 思路 假定链表A的长度为a,链表B的长度为b;一开始两个指针curA和curB分别指向headA、headB。 并且之后两个指针同步向后移动。 1.如果两链表长度相同,那么他们会在中途遇见。 2.如果两链表长度不同,那么直至最后,他们会永远错过。 思考:如何避免错过? 答:一次不行就再来一次。 详细点说就是,假如curA率先遍历完链表A后,将其下一步指向链表B的头节点。而对curB也是如此。这样做,相当于两个指针最大都走过了相同的长度a+b。如果直至最后curA和curB都为NULL时,还没有找原创 2021-11-29 15:13:37 · 437 阅读 · 0 评论 -
Leetcode 19.删除链表的倒数第n个节点
题目描述 从提示中可以看出不用判断n的边界 思路 第一眼看到这道题,想到的就是快慢指针法。 具体流程如下: 1.先创建一个虚拟头节点dummyhead,使其指向头节点head。 2.使用fast和slow两个快慢指针,都指向dummyhead。 3.先让fast独自前进n+1步,然后slow和fast同步向前走,直到fast指向空则退出。此时slow节点指向待删除节点的上一节点,进行删除操作即可。 代码实现 /** * Definition for singly-linked list. * stru原创 2021-11-29 14:23:37 · 149 阅读 · 0 评论 -
Leetcode 24.两两交换链表中的节点
题目描述 实现流程 首先定义一个虚拟指针dummy,这个指针指向链表的头节点 然后进行两两交换节点的实现步骤(以图中1->2->3->4为例): 1.首先将dummy指向2 2.然后将2指向1 3.然后将1指向3 在此过程中1和3的值会丢失,所以我们事先将它们分别存为temp1,temp2 代码实现(C++) /** * Definition for singly-linked list. * struct ListNode { * int val; * List原创 2021-11-28 19:08:17 · 172 阅读 · 0 评论 -
Leetcode 206.链表反转
题目描述 解题思路 首先想到再定义一个新的链表,但是觉得比较浪费空间。于是就想到去改变next指针的指向。 实现动画 图源:代码随想录 代码实现(C++) /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(原创 2021-11-28 18:29:07 · 167 阅读 · 0 评论 -
Leetcode 707.设计链表
先附题目截图 解题源码 class MyLinkedList { public: //定义链表节点结构体 struct LinkedNode { int val; LinkedNode* next; LinkedNode(int val): val(val),next(nullptr){} }; MyLinkedList() { dummyhead=new LinkedNode(0);原创 2021-11-28 18:07:51 · 286 阅读 · 0 评论