C++:链表(初识链表)】的更多相关文章

介绍 链表是把若干个对象用指针串联起来,形成一个链状的数据结构,链表在开发中很重要. 1.链表特征:只需要知道一个链表头,就能访问每个节点的对象. 2.链表遍历:通过每个节点指针next来对的下一个节点的地址. 3.链表尾部:最后一个节点对象的next的值是NULL. 代码演示 创建和遍历链表 #include <stdio.h> //结构体对象 struct Student { char name[32]; int age; Student *pNext; }; int main() { /…
结构体定义 /*链表结构体*/ typedef struct xLIST { listFIRST_LIST_INTEGRITY_CHECK_VALUE /*用于链表完整性检查*/ configLIST_VOLATILE UBaseType_t uxNumberOfItems; /*记录链表项数目*/ ListItem_t * configLIST_VOLATILE pxIndex; /*用于遍历链表,初始化会指向最后的链表项,这里需要注意使用了volatile关键字,表明该指针可能会在其他地方修…
链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链表. 链表分为单链表.双链表.循环链表.   一.单链表 插入:链表中插入一个节点的效率很高.向链表中插入一个节点,需要修改它前面的节点(前驱),使其指向新加入的节点,而新加入的节点则指向原来前驱指向的节点(见下图). 由上图可知,B.C之间插入D,三者之间的关系为 current为插入节点的前驱节点 current->next = new // B节点指向新节点D new->next = curr…
三大数据结构的实现方式 数据结构 实现方式 栈  数组/单链表 队列  数组/双端链表 优先级队列 数组/堆/有序链表 双端队列 双向链表 数组与链表实现方式的比较 数组与链表都很快 如果能精确预测栈或者队列所需要容纳的数据量 --- 数组 如果不能                                   --- 链表 数组的效率 无序数组 有序数组 查找 比较次数O(N) 比较次数O(logN)<—二分查找 插入 O(1) 比较次数O(N) 移动次数MaxO(N) 删除 比较次数O…
本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode { int data; ListNode *next; }; 函数接口定义: struct ListNode *readlist(); struct ListNode *getodd( struct ListNode **L ); 函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表.当读到−1时表示输入结束,函数应返回指向单链表头结…
链表和链表节点API 函数 作用 时间复杂度 listSetDupMethod 将给定的函数设置为链表的节点值复制函数 复制函数可以通过链表的dup属性直接获得,O(1) listGetDupMethod 返回链表当前正在使用的节点值复制函数 O(1) listSetFreeMethod 将给定的函数设置为链表的节点值释放函数 释放函数可以通过链表的free属性直接获得,O(1) listGetFree 返回链表当前正在使用的节点值释放函数 O(1) listSetMatchMethod 将给定…
Leetcode 25. Reverse Nodes in k-Group 以每组k个结点进行链表反转(链表) 题目描述 已知一个链表,每次对k个节点进行反转,最后返回反转后的链表 测试样例 Input: k = 2, 1->2->3->4->5 Output: 2->1->4->3->5 Input: k = 3, 1->2->3->4->5 Output: 3->2->1->4->5 详细分析 按照题目要求…
链表特点(单链表 双链表) 优点:插入和删除非常快.因为单链表只需要修改Next指向的节点,双链表只需要指向Next和Prev的节点就可以完成插入和删除操作. 缺点:当需要查找某一个节点的时候就需要一个节点一个节点去访问,这样所花的时候就比较多了.(顺序表可以弥补这缺点,但插入和删除就非常耗性能) 单链表 单链表的构成:必须要有一个链表头(head),每个节点里面有一个Next用于指向下一个节点(类似于指针).最后一个节点的Next为null来标识链表的尾. 如下图 代码实现 /* ------…
php实现反转链表(链表题一定记得画图)(指向链表节点的指针本质就是一个记录地址的变量)($p->next表示的是取p节点的next域里面的数值,next只是p的一个属性) 一.总结 链表反转两种实现方式:a.头插法(遍历一遍链表即可实现链表反转)  b.借助数组反转(遍历一遍链表将数值存在数组,反转数组,将数组里面的值尾插法插入链表,返回链表) 链表题一定记得画图 指向链表节点的指针本质就是一个记录地址的变量($p=链表,$p里面记录的就是一个地址),节点的next域里面记录的是下一个变量的地…
1.对比单向链表 单向链表查找的方向只能是一个方向,而双向链表可以向前或者向后查找 单向链表不能自我删除,需要靠辅助节点,而双向链表可以自我删除 对于单向链表的删除,我们首先要找到单向链表待删除节点的前一个节点,然后前一个节点的下一个节点指向删除节点的后一个节点. 2.双向链表的思路 3.代码实现 public class ListNode { public ListNode(int id, string name, string nickName) { this.Id = id; this.N…
算法基础~链表~排序链表的合并(k条) 1,题意:已知k个已排序链表头结点指针,将这k个链表合并,合并后仍然为有序的,返回合并后的头结点. 2,方法之间时间复杂度的比较: 方法1(借助工具vector封装好的sort方法):将k * n个结点放到vector,则原 vector的排序时间复杂度是 O(nlogn); 有k*n个结点的排序,时间复杂度是 O(knlog(kn)); 方法2(分制后相连法),分制:这里咱要想到高中的DNA复制~一个DNA复制生成K个DNA的过程. [1----复制--…
<1>链表 <2>引用和基本类型 <3>单链表 //================================================= // File Name : LinkList_demo //------------------------------------------------------------------------------ // Author : Common //类名:Link //属性: //方法: class Link…
// ListNode typedef struct LNode { int key; struct LNode *next; }LNode;   分析:这是一道很有意思的面试题,此题以及此题的变体经常出现在各大公司的面试.笔试中. 看到这道题后,第一反应是从头到尾输出比较简单.然后经过分析,这道题有以下几种解决方法: 将链表中节点的指针反转过来,然后在从头到尾输出节点中的值 当要倒置输出值时,我们会想到用栈来实现.所以这种方法是,遍历链表节点中的值,依次入栈,最后弹栈输出 仔细分析这两种方法,…
下面将实现链表排序的排序和遍历显示功能: 所定义的链表结构如下: head -> p1 -> p2 ->p3 ->....->pn; head的本身不作为数据节点,head->data保存结点个数. insert_data(NODE* head) 在head之后插入新增的数据; show_link_list(NODE* head)显示节点个数和每个节点的数据; clear_link_list(NODE* head)删除并清空数据节点(不删除头结点); FUNC_sort…
最近编程总想着参考一些有名的开源代码是如何实现的,因为要写链表就看了下linux内核中对链表的实现. 链表是一种非常常见的数据结构,特别是在动态创建相应数据结构的情况下更是如此,然而在操作系统内核中,动态创建相应的数据结构尤为频繁.由于不带数据域所以Linux中的这种链表是通用的,在如何情况下,只要需要链表的数据结构包含它就行了. 链表只包含两个指针 struct list_head { struct list_head *next, *prev; }; 数据结构如果需要链表只需要包含它就行 t…
#include<stdio.h> #include"stdlib.h" struct student { int data; struct student *pnext; }; struct students { struct students *prev; int data; struct students *pnext; }; struct student *create(int dat); //单链表创造一个节点. struct students *shuangcr…
文字描述: 为了表示前后两个数据元素的逻辑关系,对于每个数据元素,除了存储其本身的信息之外(数据域),还需存储一个指示其直接后继的信息(即直接后继的存储位置,指针域). 示意图: 算法分析: 在单链表中插入和删除元素时,主要是改变指针的值,其时间复杂度为1.而顺序存储的话,其时间复杂度为n. 在单链表中求长度时不如顺序存储结构,其时间复杂度为n: 而顺序存储是1.故可以在链表头结点中设置一个长度值,在插入数据元素时加1,在删除数据元素时减1. 在单链表中查找指定数据元素时,其时间复杂度和顺序存草…
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LinkedListTest { class Program { static void Main(string[] args) { LinkList<int> linkA = new LinkList<int>(); linkA.A…
题目描述 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. 题目地址 https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tqId=11156&tPage=1&rp=2&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking 思路 使用Python库函数,…
题目描述 输入一个链表,反转链表后,输出新链表的表头. 题目地址 https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca?tpId=13&tqId=11168&rp=3&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking 思路 pHead始终指向要翻转的结点 last指向翻转后的首结点 每反转一个节点,把pHead…
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 题目地址 https://www.nowcoder.com/practice/d8b6b4358f774294a89de2a6ac4d9337?tpId=13&tqId=11169&rp=3&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tPage=1 思…
题目: 给定一个单链表 L​1​​→L​2​​→⋯→L​n−1​​→L​n​​,请编写程序将链表重新排列为 L​n​​→L​1​​→L​n−1​​→L​2​​→⋯.例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3. 输入格式: 每个输入包含1个测试用例.每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤10​5​​).结点的地址是5位非负整数,NULL地址用−1表示. 接下来有N行,每行格式为: Address Data Next 其中Address是结…
题目: 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 K 个元素不反转. 输入格式: 每个输入包含 1 个测试用例.每个测试用例第 1 行给出第 1 个结点的地址.结点总个数正整数 N (<=105​)5​​).以及正整数 K (≤N),即要求反转的子链结点的个数.结点的地址是 5 位非负整数,NULL…
题目1:调整数组顺序使奇数位于偶数前面 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 思路:主要的问题在于不能乱了之前的相对位置,用了两个循环,第一个遍历数组,第二个里面判断是不是奇数,如果是就判断它前面是不是有偶数,有的话就依次和这些偶数交换 class Solution { public: void reOrderArray(vector<int> &arra…
逆转链表是简单而又简单的链表问题,其问题的方法之一可以设置三个指针,一个指向当前结点,一个指向前驱结点,一个指向后继指针 代码如下: class Solution { public: ListNode* ReverseList(ListNode* pHead) { // if(pHead==NULL || pHead->next==NULL) // return pHead; ListNode *cur=pHead; ListNode *pre=NULL; ListNode *tmp; whil…
这一课最后实现的链表,和普通链表不同,借鉴了linux内核链表的思想,这也是企业使用的链表. 基础介绍: 顺序表的思考 顺序表的最大问题是插入和删除需要移动大量的元素!如何解决?A:在线性表数据元素之间空出位置,为以后插入使用.B:这样不行!中间无论空多少都有可能用完!A:那不是无解了嘛!B:我觉得让每个元素都知道他的下个元素就行了,哪有空插哪 链表的基本概念 表头结点 链表中的第一个结点,包含指向第一个数据元素的指针以及链表自身的一些信息 数据结点 链表中代表数据元素的结点,包含指向下一个数据…
喜欢的话可以扫码关注我们的公众号哦,更多精彩尽在微信公众号[程序猿声] 01 单链表(Singly Linked List ) 1.1 什么是单链表? 单链表是一种链式存储的结构.它动态的为节点分配存储单元.当有节点插入时,系统动态的为结点分配空间.在结点删除时,应该及时释放相应的存储单元,以防止内存泄露.由于是链式存储,所以操作单链表时,必须知道头结点或者头指针的位置.并且,在查找第i个节点时,必须找到第i-1个节点. 1.2 单链表的存储结构代码描述 对于链式存储,通过上一节的讲解相信大家已…
LikedList: package Date_pacage; public class LinkedList<E> { public static void main(String[] args) { LinkedList<Integer> linkedList = new LinkedList<>(); for(int i = 0 ; i < 5 ; i ++) { linkedList.addFirst(i); System.out.println(link…
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2733 解决:1181 题目描述: 建立一个升序链表并遍历输出. 输入: 输入的每个案例中第一行包括1个整数:n(1<=n<=1000),接下来的一行包括n个整数. 输出: 可能有多组测试数据,对于每组数据, 将n个整数建立升序链表,之后遍历链表并输出. 样例输入: 4 3 5 7 9 样例输出: 3 5 7 9 来源: 2000年华中科技大学计算机研究生机试真题 代码: #include <stdio.h> #inclu…
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do this in-place without altering the nodes' values. For example,Given{1,2,3,4}, reorder it to{1,4,2,3}. 由于链表尾端不干净,导致fast->next!=NULL&&fast->next-&…