链表
文章平均质量分 58
wnjason
这个作者很懒,什么都没留下…
展开
-
LeetCode---Linked List Cycle
题目大意:给出一个链表,判断其中是否存在环。算法思想:利用一个map容器对每个节点做标记,遍历链表中的每个节点,如果该节点做过标记则存在环。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNo原创 2015-09-24 21:04:55 · 274 阅读 · 0 评论 -
LeetCode---Delete Node in a Linked List
题目大意:给出一个链表中的节点,在链表中删除该节点,如果是尾节点则不删除。如:链表 1 -> 2 -> 3 -> 4 要删除链表中值为3的节点,则操作后的链表为1 -> 2 -> 4。算法思想:1.设置一个前驱节点和一个后继节点。2.判断后继节点是否为空,若为空则是尾节点直接返回。否则遍历链表。3.从要删除节点开始,一次将后继节点中的值向前移动,直到遍历完链表为止。4.删除链表原创 2015-09-18 12:21:17 · 333 阅读 · 0 评论 -
LeetCode---Remove Nth Node From End of List
题目大意:给出一个链表,和一个数n,从链表尾部开始删除第n个节点。返回修改后的链表。算法思想:遍历量表,将链表中的每个节点记录下来,然后计算要删除链表的前驱,反向删除第n个节点。如果要删除的节点是头结点或尾节点需要特殊处理。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int v原创 2015-10-08 19:29:48 · 273 阅读 · 0 评论 -
LeetCode---Remove Linked List Elements
题目大意:给出一个链表,和一个要移除元素,返回移除了所有元素的链表。算法思想:1.首先,判断表头的元素与所给元素是否相等,采用循环的方式移除所有与表头元素。2.采用前驱指针的方法,通过遍历链表,移除链表中符合要求的元素。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int v原创 2015-10-10 19:37:25 · 250 阅读 · 0 评论 -
LeetCode---Convert Sorted List to Binary Search Tree
题目大意:给出一个已排好序的升序链表,将其转化为一颗高度平衡的二叉搜索树。算分思想:1.遍历一遍链表,将链表中的元素放在容器中。2.采用分治法将一个链表分为两半,一半对应BST的左子树,一半对应BST的右子树。3.递归生成转换好的二叉搜索树(BST)。代码如下:/** * Definition for singly-linked list. * struct ListN原创 2015-10-14 20:41:37 · 396 阅读 · 0 评论 -
LeetCode---Intersection of Two Linked Lists
题目大意:给出两个链表,寻找出两个链表的汇聚节点。算法思想:1.分别遍历两个链表,将链表中的节点存入容器中。2.扫描两个容器找出汇聚节点,如果不存在汇聚节点返回NULL。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next原创 2015-10-14 16:50:38 · 261 阅读 · 0 评论 -
LeetCode---Partition List
题目大意:给出一个链表和一个基准元素,将该链表划分为两部分使得前部分元素都小于基准元素,后部分元素都大于或等于基准元素。算法思想:1.遍历链表,将小于基准元素的节点连接起来。同时将大于基准元素的节点连接起来。2.最后将两部分链表连接起来返回。3.需注意三种情况。(1)所有元素都小于基准元素(2)所有元素都大于基准元素(3)既存在小于基准元素,又存在大于基准元素。代码如下:/原创 2015-10-15 14:07:20 · 296 阅读 · 0 评论 -
LeetCode---Palindrome Linked List
题目大意:给出一个链表,判断链表中存放的数是否构成回文。算法思想:1.如果链表只有一个节点或者为空,返回真。2.遍历链表将链表中的元素都放入容器中。3.首尾比较容器中的元素,如果不相等返回false。当比较完容器中所有的元素后返回真。代码如下:/** * Definition for singly-linked list. * struct ListNode { *原创 2015-10-15 19:43:48 · 261 阅读 · 0 评论 -
LeetCode---Insertion Sort List
题目大意:给出一个链表,采用插入法对链表进行排序。算法思想:1.设置一个表头节点,方便节点的插入。2.如果链表为空或者只有一个节点,直接返回。3.按照插入排序的思想,遍历n-1个节点。对于每个节点寻找从头结点到当前节点的合适位置并插入。4.从头结点到当前位置的节点保证是有序的。代码如下:/** * Definition for singly-linked list.原创 2015-10-15 18:03:14 · 252 阅读 · 0 评论 -
LeetCode---Linked List Cycle II
题目大意:给出一个链表,判断链表中是否有环,如果有环则返回环的起点,如果没有环则返回NULL。算法思想:遍历链表,将链表中的每个节点放入map容器中,并作标记,遍历节点时如果遇到做标记的节点则表明有环并返回该节点。如果遍历完链表则表明没环则返回NULL。代码如下:/** * Definition for singly-linked list. * struct ListNode原创 2015-10-07 00:50:41 · 299 阅读 · 0 评论 -
LeetCode---Rotate List
题目大意:给出一个链表,将其向右旋转k个节点。算法思想:1.如果链表为空或者K==0直接返回。2.遍历链表,记录链表中的每个节点,并为其编号。3.反向第K个节点将为表头结点,将尾节点和头结点连接起来。4.如果K大于链表的长度 k%=list.size.代码如下:/** * Definition for singly-linked list. * struct Lis原创 2015-10-19 12:15:55 · 287 阅读 · 0 评论 -
Leetcode---Remove Duplicates from Sorted List
题目大意:给出一个已排序了的链表,删除之中重复出现的元素,保证每个元素只出现一次。算法思想:1.设置两个指针,一个指向前驱节点,一个指向当前遍历的节点。2.如果链表为空直接返回。遍历链表,比较前驱节点的元素和当前节点的元素是否相同,如果相同的则做标记,如果不相同则判断是否有标记,如果有则删除重复元素,如果没有标记则移动指针,继续遍历链表。3.当链表遍历完后判断是否有标记存在原创 2015-09-27 19:47:00 · 258 阅读 · 0 评论 -
LeetCode---Reverse Linked List
题目大意:给出一个单链表,使其逆转。算法思想:如果链表为空直接返回,设置3个指针,前驱指针,后继指针,当前遍历指针,然后遍历链表,遵循先继承再修改的原则转换每个节点的后继指针。当链表遍历完后,前驱节点为为头节点。返回修改后的链表。代码如下:/** * Definition for singly-linked list. * struct ListNode { * in原创 2015-09-27 20:37:48 · 235 阅读 · 0 评论 -
LeetCode---Merge Two Sorted Lists
题目大意:给出两个排序了的链表,要求将它们合并成一个链表,新链表由给出的两个链表拼接而成。算法思想:1.判断给出的链表是否有空链表,若有则直接返回不空的。2.选取两个链表中第一格元素较小的节点做为新链表的头结点。3.遍历两个链表,将节点值小的节点插入新链表知道,有一个链表遍历完为止。4.将非空的链表接在新链表的末尾。5.返回合并后的链表。代码如下:/** * De原创 2015-09-29 20:44:35 · 321 阅读 · 0 评论 -
LeetCode---Remove Duplicates from Sorted List II
题目大意:给出一个已排序的链表,删除链表中元素个数不为1的链表节点。算法思想:1.遍历链表,采用容器记录链表节点,同时为每个节点元素计数。2.遍历容器,将节点元素个数为1的节点连接起来,释放元素个数大于1的节点。3.返回修改后的链表。注意为了方便链表的操作,设置了一个头结点。代码如下:/** * Definition for singly-linked list.原创 2015-10-17 18:44:52 · 293 阅读 · 0 评论 -
LeetCode---Add Two Numbers
题目大意:给出两个链表,每个链表表示一个逆序的数。将两个链表表示的数相加求和最后以链表的形式返回。算法思想:1.如果有一个链表为空,则返回相对的链表。2.遍历链表。模拟加法进行运算,知道有一个链表为空结束。3.将不空的链表继续和进位经行加法运算。4.如果两个链表都遍历完还有进位则新申请一个节点存放进位,连接入表1.代码如下:/** * Definition for s原创 2015-10-17 20:27:59 · 295 阅读 · 0 评论 -
LeetCode---Sort List
题目大意:给出一个链表,将其排序。要求时间复杂度为O(nlogn),空间复杂度为常数。算法思想:1.如果链表为空,直接返回。2.遍历链表,已链表中的元素之作为键,节点指针作为该节点对应的值,将这个对组放入multimap容器中。3.利用multimap的特性对链表中的元素进行排序。4.遍历容器,将容器中排完序的节点串成链表。5.将尾节点置空,返回链表。代码如下:cl原创 2015-09-30 19:27:26 · 306 阅读 · 0 评论 -
LeetCode---Swap Nodes in Pairs
题目大意:给出一个链表,成对的交换相邻两个元素的节点,要求不能够修改每个节点的值。算法思想:1.对于给出的链表判断其节点个数,如果小于2则直接返回链表。2.设置4个节点指针,分别指向前驱节点,当前节点,后继节点,缓存节点指针。3.由于没有表头节点,则对于头两个节点单独进行交换。4.遍历链表,根据先继承后修改的原则,交换相邻的两个节点。移动后继节点时要注意,如果当前节点为空,则后原创 2015-09-30 17:10:35 · 313 阅读 · 0 评论 -
LeetCode---Reorder List
题目大意:给出一个链表,将链表的首尾节点相邻组成一个新链表。算法思想:1.遍历链表,将链表中的节点存放如容器中。2.遍历容器,交替从容器首尾中取出节点,组成一个链表。3.去掉添加的头结点。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; * Lis原创 2015-10-18 13:56:53 · 310 阅读 · 0 评论 -
LeetCode---Reverse Linked List II
题目大意:给出一个链表和一个区间,将链表在区间内的节点逆转。算法思想:1.设置一个表头节点,方便对链表的操作。2.找到区间内的所有节点,将其放入容器中。3.遍历容器,将容器中的节点逆转并连接如链表中。代码如下:/** * Definition for singly-linked list. * struct ListNode { * int val; *原创 2015-10-15 20:23:22 · 287 阅读 · 0 评论