![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
链表
经典链表面试题
Lc_summer
这个作者很懒,什么都没留下…
展开
-
二叉树的后序遍历递归和迭代解法
leetcode 145. 二叉树的后序遍历给定一个二叉树,返回它的后序遍历。struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode() : val(0), left(nullptr), right(nullptr) {} TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} TreeNode(int原创 2021-03-02 17:28:05 · 143 阅读 · 0 评论 -
快慢指针求解 链表环路问题
一个链表没有环,则遍历一遍会指向最后一个节点然后停下,如果一个存在环路则在遍历的时候会一直循环遍历环的各个节点,那么判断是否有环即判断否当前指针重复指向同一段内存单元,我们可以利用快慢指针来判断,如果遇到的结尾停止,则没有环,如果快慢指针相遇,则存在环路 bool hasCycle(ListNode *head) { if(head==NULL) return false; ListNode *fast = head->next;原创 2020-11-11 16:27:11 · 79 阅读 · 0 评论 -
双指针求解环形链表的入口
环形链表入口给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。示例:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个环,其尾部连接到第二个节点。思路:第一步,用快慢指针求解链表中是否有环,快指针每次后移两个节点,慢指针每次后移一个节点,快慢指针不为空且相等时则有环,否则无环;第二步,当快慢指针相遇时,快指针的路程是慢指针路程的两倍,假设起点A到环入口的路程为a,入口到环内的相遇点B的距离为b,此时慢指针原创 2021-02-26 11:46:05 · 166 阅读 · 0 评论 -
迭代和递归反转链表
反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL迭代思路用两个指针分别指向链表的当前节点pCurNode,和当前节点的前一个节点pPrevNode,初始pCurNode = head, pPrevNode = nullptr, 遍历整个链表,每次都将pCurNode的next指向pPrevNode,然后pCurNode和pPrevNode后移,当pCurNode为原创 2021-02-26 10:49:51 · 100 阅读 · 0 评论 -
采用虚拟头尾节点的双向链表结构设计链表
设计链表设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:1.get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。2.addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点原创 2021-02-25 21:18:30 · 347 阅读 · 0 评论 -
利用虚拟头节点删除链表中的元素
移除链表元素删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5思路:添加一个虚拟的头节点,这样即便原来的头节点是要删除的节点也可以和非头节点一样删除,移除链表的某个节点,需要知道当前节点的前一个节点,这样我们在遍历链表的时候,只需要看当前节点的下一个节点是否为待删除的节点即可,如果是则删除当前节点,继续判断当前节点的下一个节点是否为待删除的节点原创 2021-02-25 19:17:48 · 110 阅读 · 0 评论