链表
文章平均质量分 56
张荣华_csdn
这个作者很懒,什么都没留下…
展开
-
430.扁平化多级双向链表
您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。扁平化列表,使所有结点出现在单级双链表中。您将获得列表第一级的头部。示例:输入: 1---2---3---4---5---6--NULL | 7---8---9---10-...原创 2018-11-16 15:45:42 · 290 阅读 · 0 评论 -
链表的分化
对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。测试样例:{1,4,2,5},3{1,2,4,5}/*struct ListNode { int...原创 2018-08-17 12:48:27 · 169 阅读 · 0 评论 -
输出单向链表中倒数第k个结点
输入描述:输入说明1 输入链表结点个数2 输入链表的值3 输入k的值输出描述:输出一个整数#include<iostream>using namespace std;struct ListNode{ int val; ListNode* next; ListNode(int x) : val(x), next(NULL){}};in...原创 2018-08-10 00:03:16 · 460 阅读 · 0 评论 -
2. 两数相加
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807算法我们首先从最低有效位也就是列...原创 2018-08-16 15:37:08 · 204 阅读 · 0 评论 -
树中两个节点的最低公共祖先节点
递归的解法如下:public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root==null||root==p||root==q) return root; TreeNode left = lowestCommonAncestor(ro...原创 2018-08-03 00:02:59 · 542 阅读 · 0 评论 -
Reverse Linked List(递归解法)
Reverse a singly linked list.Example:Input: 1->2->3->4->5->NULLOutput: 5->4->3->2->1->NULL/** * Definition for singly-linked list. * struct ListNode { * in...原创 2018-08-02 00:26:44 · 639 阅读 · 0 评论 -
Reverse Linked List(非递归解法)
Reverse a singly linked list.Example:Input: 1->2->3->4->5->NULLOutput: 5->4->3->2->1->NULL思路:采用双指针,一个指向当前结点,另一个指向之前的结点。/** * Definition for singly-linked list....原创 2018-08-02 00:26:36 · 203 阅读 · 0 评论 -
Delete Node in a Linked List
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.Given linked list -- head = [4,5,1,9], which looks like following: 4 -> 5 -> 1...原创 2018-08-06 12:43:18 · 158 阅读 · 0 评论 -
Palindrome Linked List
Given a singly linked list, determine if it is a palindrome.Example 1:Input: 1->2Output: falseExample 2:Input: 1->2->2->1Output: trueFollow up:Could you do it in O(n) time a...原创 2018-08-06 12:43:11 · 117 阅读 · 0 评论 -
Palindrome Linked List
Given a singly linked list, determine if it is a palindrome.Example 1:Input: 1->2Output: falseExample 2:Input: 1->2->2->1Output: true/** * Definition for singly-linked list...原创 2018-08-06 12:32:15 · 132 阅读 · 0 评论 -
树中两个节点的最低公共祖先
思路:先求出根结点到两个节点的路径,保存在链表或者list中,然后问题转换为求两条路径的最后一个公共结点。bool GetNodePath(const TreeNode* pRoot, const TreeNode* pNode, list<const TreeNode*>& path){ if(pRoot == pNode) return tru...原创 2018-07-30 00:01:12 · 229 阅读 · 0 评论 -
圆圈中最后剩下的数字
题目:0,1,2,,,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里最后剩下的最后一个数字。int LastRemaining_Solution1(unsigned int n, unsigned int m){ if(n < 1 || m < 1) return -1; unsigned int i...原创 2018-07-27 00:02:21 · 225 阅读 · 0 评论 -
Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins.For example, the following two linked lists:A: a1 → a2 ↘ c...原创 2018-07-08 00:21:39 · 118 阅读 · 0 评论 -
链表指定值清除
现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。测试样例:{1,2,3,4,3,2,1},2{1,3,4,3,1}/*struct ListNode { int val; ...原创 2018-08-17 12:48:33 · 158 阅读 · 0 评论 -
链表的回文结构
请编写一个函数,检查链表是否为回文。给定一个链表ListNode* pHead,请返回一个bool,代表链表是否为回文。测试样例:{1,2,3,2,1}返回:true{1,2,3,2,3}返回:false/*struct ListNode { int val; struct ListNode *next; ListNode(int x)...原创 2018-08-17 12:48:40 · 146 阅读 · 0 评论 -
138.复制带随机指针的链表
给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深度拷贝。 /** * Definition for singly-linked list with a random pointer. * struct RandomListNode { * int label; * RandomListNode *next...原创 2018-10-23 22:17:09 · 356 阅读 · 0 评论 -
114.二叉树展开为链表
给定一个二叉树,原地将它展开为链表。例如,给定二叉树 1 / \ 2 5 / \ \3 4 6将其展开为:1 \ 2 \ 3 \ 4 \ 5 \ 6/** * Definition for a binary tree node. ...原创 2018-10-21 12:25:09 · 521 阅读 · 0 评论 -
92. 反转链表 II
反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明:1 ≤ m ≤ n ≤ 链表长度。示例:输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL/** * Definition for singly-linked list. * str...原创 2018-09-07 13:39:45 · 177 阅读 · 0 评论 -
83. 删除排序链表中的重复元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例 1:输入: 1->1->2输出: 1->2示例 2:输入: 1->1->2->3->3输出: 1->2->3/** * Definition for singly-linked list. * struct ListNode { * ...原创 2018-09-06 14:37:02 · 215 阅读 · 0 评论 -
82. 删除排序链表中的重复元素 II
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。示例 1:输入: 1->2->3->3->4->4->5输出: 1->2->5示例 2:输入: 1->1->1->2->3输出: 2->3/** * Definition for singly-linke...原创 2018-09-06 14:35:10 · 178 阅读 · 0 评论 -
21. 合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * struct ListNode { * int val...原创 2018-08-18 11:18:52 · 130 阅读 · 0 评论 -
单链表相交判断
给定两个单链表的头节点head1和head2,如何判断两个链表是否相交?相交的话返回true,不想交的话返回false。给定两个链表的头结点head1和head2(注意,另外两个参数adjust0和adjust1用于调整数据,与本题求解无关)。请返回一个bool值代表它们是否相交。/*struct ListNode { int val; struct ListNode *...原创 2018-08-20 09:56:27 · 223 阅读 · 0 评论 -
有环单链表相交判断
如何判断两个有环单链表是否相交?相交的话返回第一个相交的节点,不想交的话返回空。如果两个链表长度分别为N和M,请做到时间复杂度O(N+M),额外空间复杂度O(1)。给定两个链表的头结点head1和head2(注意,另外两个参数adjust0和adjust1用于调整数据,与本题求解无关)。请返回一个bool值代表它们是否相交。/*struct ListNode { int val;...原创 2018-08-20 09:56:19 · 228 阅读 · 0 评论 -
无环单链表判相交
现在有两个无环单链表,若两个链表的长度分别为m和n,请设计一个时间复杂度为O(n + m),额外空间复杂度为O(1)的算法,判断这两个链表是否相交。给定两个链表的头结点headA和headB,请返回一个bool值,代表这两个链表是否相交。保证两个链表长度小于等于500。/*struct ListNode { int val; struct ListNode *next;...原创 2018-08-19 07:06:28 · 278 阅读 · 0 评论 -
25. k个一组翻转链表
给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。示例 :给定这个链表:1->2->3->4->5当 k = 2 时,应当返回: 2->1->4->3->5当 k = 3 时,应当返回: 3->2->...原创 2018-08-19 07:05:13 · 313 阅读 · 0 评论 -
24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。示例:给定 1->2->3->4, 你应该返回 2->1->4->3.说明:你的算法只能使用常数的额外空间。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。/** * Definition for singly-linked list. * struct List...原创 2018-08-19 07:05:06 · 231 阅读 · 0 评论 -
复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。/*struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL),...原创 2018-08-17 12:48:49 · 212 阅读 · 0 评论 -
二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜素树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。void ConvertNode(BinaryTreeNode* pNode, BinaryTreeNode** pLastNodeInList);BinaryTreeNode* Convert(BinaryTreeNode* pRootOfTree){ BinaryTre...原创 2018-07-15 00:55:38 · 118 阅读 · 0 评论 -
两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。链表结点定义如下:struct ListNode{int m_nKey;ListNode* m_pNext;};从链表结点的定义可以看出,这两个链表是单项链表。如果两个单项链表有公共的结点,那么这两个链表从某一结点开始,它们的m_pNext都指向同一个节点。但由于是单项链表的结点,每个结点只有一个m_pNext,因此从第一个公共结点...原创 2018-07-20 00:15:31 · 324 阅读 · 0 评论 -
编写程序销毁一个单链表
销毁链表指的是将链表中的所有结点删除,并且释放掉每个结点所占用的内存空间,使其成为一个空链表。可以在顺序遍历链表的过程中依次删除链表中的每个结点,并释放掉它的内存空间。void deleteLinkList(LinkList * list){LinkList p=*list;while(p!=NULL){ *list=p->next; free(p);...原创 2018-07-20 00:14:52 · 3120 阅读 · 0 评论 -
Palindrome Linked List
Given a singly linked list, determine if it is a palindrome.Example 1:Input: 1->2Output: falseExample 2:Input: 1->2->2->1Output: true/** * Definition for singly-linked list. * struct L...原创 2018-06-08 09:14:53 · 207 阅读 · 0 评论 -
链表判环
如何判断一个单链表是否有环?有环的话返回进入环的第一个节点的值,无环的话返回-1。如果链表的长度为N,请做到时间复杂度O(N),额外空间复杂度O(1)。给定一个单链表的头结点head(注意另一个参数adjust为加密后的数据调整参数,方便数据设置,与本题求解无关),请返回所求值。/*struct ListNode { int val; struct ListNode *next; ...原创 2018-06-07 08:55:37 · 333 阅读 · 0 评论 -
复杂链表的复制
输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点)。/*struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random...原创 2018-06-07 08:55:26 · 141 阅读 · 0 评论 -
链表指定值清除
现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。测试样例:{1,2,3,4,3,2,1},2{1,3,4,3,1}/*struct ListNode { int val; struct ListNode...原创 2018-06-07 08:55:18 · 275 阅读 · 0 评论 -
Intersection of Two Linked Lists
Write a program to find the node at which the intersection of two singly linked lists begins.For example, the following two linked lists: A: a1 → a2 ↘ ...原创 2018-06-05 08:05:38 · 268 阅读 · 0 评论 -
Insertion Sort List
Sort a linked list using insertion sort.A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list.With each iteration one element (re...原创 2018-06-06 08:15:57 · 288 阅读 · 0 评论 -
Sort List
Sort a linked list in O(n log n) time using constant space complexity.Example 1:Input: 4->2->1->3Output: 1->2->3->4Example 2:Input: -1->5->3->4->0Output: -1->0->...原创 2018-06-05 08:06:38 · 188 阅读 · 0 评论 -
删除链表中的某个结点
实现一个算法,删除单向链表中间的某个结点,假定你只能访问该结点。给定带删除的头节点和要删除的数字,请执行删除操作,返回删除后的头结点。链表中没有重复数字。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*/class Remove {publi...原创 2018-06-04 01:11:46 · 601 阅读 · 0 评论 -
环形链表插值
有一个整数val,如何在节点值有序的环形链表中插入一个节点值为val的节点,并且保证这个环形单链表依然有序。给定链表的信息,及元素的值A及对应的nxt指向的元素编号同时给定val,请构造出这个环形链表,并插入该值。测试样例:[1,3,4,5,7],[1,2,3,4,0],2返回:{1,2,3,4,5,7}/*struct ListNode { int val; struct ListN...原创 2018-06-04 01:11:33 · 190 阅读 · 0 评论 -
Remove Nth Node From End of List(C++)
Given a linked list, remove the n-th node from the end of list and return its head./** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int ...原创 2018-05-23 13:17:53 · 233 阅读 · 0 评论