#include <iostream> using namespace std; //链表结构体 struct ListNode { int m_Value; ListNode *next; }; //创建一个单链表 ListNode *CreateList(int *a,int n) { ListNode *pHead = NULL; ListNode *pTemp = NULL; int i = 0; for(i = 0; i < n; i++) { //ListNode *pNew…
剑指Offer:链表中环的入口节点[23] 题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null. 题目分析 第一步确定链表中是否包含环,怎么确定呢?我们定义两个指针橙和蓝,橙每次走一步,蓝每次走两步,如果他俩重合了,这就说明链表中存在环. 第二步求环的长度,两者碰头后,让其中一个继续走,每走一步步数加一,然后求得环的长度. 第三步求环的初始节点,仍然是两个指针,其中一个事先走环长个节点,然后两者同时移动,直到两者碰头,然后那个节点就是环的初始节点. Java题解…
单链表的反转可以用递归.非递归和栈的方法实现 链表节点定义: struct ListNode{ int val; Node* next; ListNode(int x):val(x),next(nullptr){} } 1.栈 ListNode* reverseList(ListNode* head) { if(!head || !head->next) return head; stack<ListNode*>stk; //将链表的结点全部压进栈 while(head){ stk.pu…
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针.   题目的意思是,在一颗二叉树的中序遍历中,给出其中一个节点,让你找到中序中该节点的下一个节点   题解: 情况 1:某节点有右子树,下一节点为右子树中的最左子节点 情况 2:某节点无右子树,且就是他父节点左子节,则下一节点为父节点 情况 3:某节点无右子树,且为他父节点的右子节点,则向上递归寻找它的父节点,直到根节点或某个父节点是它自身父节点的左子节…
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 解题思路 # -*- coding:utf-8 -*- class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: def deleteDuplication(self…
题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null.   题解: 使用快慢指针即可,若快慢指针会相遇,则有环,否则快指针先到空节点: 此时,快指针从此处一次移一步遍历,慢指针从头结点开始遍历,两指针再次相遇时即为环的重合节点: class Solution { public: ListNode* EntryNodeOfLoop(ListNode* pHead) { if (pHead == nullptr || pHead->next == nullptr)ret…
链接 https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e?tpId=13&tqId=11210&tPage=3&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 题意 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结…
剑指 Offer 22. 链表中倒数第k个节点 题意 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. ​ 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6,则这个链表的倒数第 3 个节点是值为 4 的节点. ​ 链表节点的定义如下: struct ListNode { int val; ListNode* next; ListNode(int x) : val(x), next(NULL) {…
本题来自<剑指offer> 栈的插入弹出序列 题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 思路: C++ Code: Python Code: 总结:…
本题来自<剑指offer> 链表中倒数第k个节点 题目: 输入一个链表,输出该链表中倒数第k个结点. 思路: 倒数第k个节点,而且只能访问一遍链表,定义两个节点,两者之间相差k个距离,遍历到尾节点,则便找到了倒数k节点了. 考虑代码的鲁棒性.代码的鲁棒是指程序能够判断输入是否合乎规范要求,并对不合理的输入给予合理的处理. 1.如果传入的根节点是空:直接返回空 2.传入的数据少于k个:在遍历前k个节点时候,如果发现为空,则直接返回空 3.传入的k为小于或者等于0:直接返回空 4.正常的数据,fi…