链表
阳光丿洒脱
死亡不是终点,遗忘才是。
展开
-
双向链表的操作(创建,插入,删除)
双向链表的代码看似复杂,其实很简单,只要画图便可明白,删除假如要删除的结点叫pos.pos->prev->next=pos->next; pos->next->prev=pos->prev; free(pos);...原创 2019-03-27 23:51:54 · 3676 阅读 · 1 评论 -
链表题目----5 相交链表 和 环形链表 和 返回链表开始入环的第一个节点
相交链表思路链表交叉不可能是x型因为有可能两个链表不等长,所以我们必须让他们从同一起跑位置去起跑从同一起跑位置出发,依次比较每个结点的地址是否相同/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; *...原创 2019-10-05 09:07:18 · 143 阅读 · 0 评论 -
链表题目---4 删除链表中重复的结点 和 判断链表是否为回文链表
删除链表中重复的结点/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* deleteDuplication(ListNod...原创 2019-10-05 08:35:41 · 117 阅读 · 0 评论 -
链表题目---3 合并两个有序单链表 和 分割链表
合并两个有序单链表/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode*...原创 2019-10-04 15:10:28 · 232 阅读 · 0 评论 -
链表题目--2 求链表的中间结点 和 求链表中倒数第k个结点
思路一个走两步,一个走一步。一个走到尾,另外一个就走到了中间原创 2019-10-04 11:22:07 · 221 阅读 · 0 评论 -
链表题目--1 删除链表中所有等于val的值
注意事项要删除的结点相邻第一个结点就是要删除的结点/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* removeElements(struct ListNode...原创 2019-10-03 18:49:57 · 673 阅读 · 0 评论 -
再写双向循环链表
#pragma once#include<assert.h>#include<malloc.h>#include<stdio.h>typedef int DLDataType;//定义链表结点结构typedef struct DListNode{ DLDataType value; struct DListNode *prev; //指向前...原创 2019-10-03 18:21:53 · 336 阅读 · 0 评论 -
再写单链表(不带头单链表)
单链表实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:单向、双向带头、不带头循环、非循环虽然有这么多的链表的结构,但是我们实际中最常用还是两种结构:无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结 构,如哈希桶、图的邻接表等等。另外这种结构在学校的考试中出现很多。带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用...原创 2019-10-03 16:35:29 · 163 阅读 · 0 评论 -
不带头结点的链表基础操作(初始化,增删改查)
首先我们要想,一个结点里面要有什么?一个是数据域,第二个是指针域,指向下一个结点,所以我们用一个结构体来包括一个结点所需要的这些内容。这是链表中的一个结点的内容SListDataType这个类型,是用户自定义类型,可以是int ,double,char,还可以是一个结构体类型。而这个结构体里,就是链表的创建,里面是第一个结点的指针。初始化,首先传一个链表的结构体指针,第一步判断指针...原创 2019-03-22 00:07:00 · 3868 阅读 · 0 评论 -
链表面试题1:反转单链表,不带头结点。
三个指针p1,p2,p3,p1指向头结点的前一个结点,也就时指空,p2指向头结点,p3指向头结点下一个结点。p3指向p2的下一个,让p2指针域指向p1,让p1挪到p2上,再让p2指向p3....原创 2019-03-23 00:08:42 · 233 阅读 · 0 评论 -
链表面试题2:编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
我们可以,用两个新链表,一个存比基准值大的,另一个存比基准值小的。然后再拼接在一起。用尾插的方法,首先说小的,创建两个指针,一个头,一个尾,再创建个指针跑链表,扫描每一个结点,如果里的值小,存入小链表里,存的时候,如果链表为空,则直接存入头结点,否则,存入下一个结点,同理大链表一样,最后将小链表放在大链表之前,如果给的基准值比整个链表中任何数都小,则小链表为空,直接返回大链表就行哦。...原创 2019-03-23 00:20:38 · 3709 阅读 · 0 评论 -
链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。
链表面试题3:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成 的。首先我们的思想是将得一个链表和第二个链表的每个结点进行比较,谁小谁就插入到新链表的最后。首先我们要判段链表是否为空,如果为空的话,就返回NULL,再这里如果第一个为空,就返回第二个,如果第二个为空就返回第一个,如果都为空,随便返回一个都是NULL。采用尾插法,用两个指针,一个指头,一个...原创 2019-03-27 23:29:35 · 2201 阅读 · 0 评论 -
链表题目---6 复制带随机指针的链表
思路将新结点放在老结点的后面复制random将链表拆开/*// Definition for a Node.class Node {public: int val; Node* next; Node* random; Node() {} Node(int _val, Node* _next, Node* _random) { ...原创 2019-10-05 11:21:32 · 251 阅读 · 0 评论