链表
lark_ying
清醒时工作,糊涂时读书,独处时思考,烦恼时睡觉~
展开
-
剑指offer 52-两个链表的第一个公共节点 C++
题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)思路1:分别求出两链表表长,计算差值dist,让长的先走dist,然后两链表同时走,找到第一个相同节点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public:原创 2020-05-16 22:40:48 · 170 阅读 · 0 评论 -
剑指offer 23-链表中环的入口节点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路1:1、判断有无环:定义两指针,quicknode每次走两步,slownode每次走一步。如果两个指针相遇,则说明有环;否则无环。2、判断环的入口节点:相遇的节点必在环内!让slownode走一圈,计算环中节点个数count。3、slownode和quicknode都指向头节点,先让quicknode走count步,然后两指针一起走,相遇节点即为环的入口节点。/*struct ListNode { i原创 2020-05-16 20:38:52 · 94 阅读 · 0 评论 -
剑指offer 18-删除链表的节点 C++
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路1:非递归1、新建一个头节点,防止被删除节点位于头节点;2、定义两个指针,pre用于指向不重复的节点,last用于判断重复的节点/*struct ListNode { int val; struct ListNode *next; ListNo原创 2020-05-16 19:21:45 · 230 阅读 · 0 评论 -
剑指offer 35-复杂链表的复制 C++
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路1:1、遍历链表,复制每个结点,如复制结点A得到A1,将结点A1插到结点A后面;2、重新遍历链表,复制老结点的随机指针给新结点3、拆分链表,将链表拆分为原链表和复制后的链表/*struct RandomListNode { int label;原创 2020-05-15 21:34:09 · 164 阅读 · 0 评论 -
剑指offer 25-合并两个排序的链表 C++
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。思路1:非递归——创建两个指针,一个用于记录链表头节点,用于return,一个人用于链表遍历/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Merge(ListNode*原创 2020-05-15 16:09:06 · 139 阅读 · 0 评论 -
剑指offer 24-反转链表 C++
题目描述输入一个链表,反转链表后,输出新链表的表头。思路1:非递归解法——定义三个指针pre,cur,last,先保存当前指针cur的下一个指针last,再让cur指向上一个节点pre。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* ReverseList(Lis原创 2020-05-15 14:59:43 · 195 阅读 · 0 评论 -
剑指offer 6-从尾到头打印链表 C++
题目描述输入一个链表,按链表从尾到头的顺序返回一个ArrayList。思路1:用递归自上(顶)而下(子问题)求解,注意边界条件/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :* val(x), next(NULL) {* }* };*/class Solution {public: vec原创 2020-05-15 13:12:26 · 107 阅读 · 0 评论 -
剑指offer 22-链表中倒数第k个节点 C++
题目描述输入一个链表,输出该链表中倒数第k个结点。tips:注意边界条件,以及k与链表的大小。思路1:定义两个指针,第1个指针先走k-1步,然后两个指针同时走,待第一个指针走到末节点,第二个指针指向倒数第k个/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* Fi原创 2020-05-15 12:51:39 · 147 阅读 · 0 评论