zoukankan      html  css  js  c++  java
  • 深入研究链表

    一.链表的定义

    链表是将一组在存储地址上非顺序不连续的数据元素,通过指针链接起来从而实现数据元素之间的逻辑关系的线性表

    链式结构的特点:链表存储的数据元素之间的逻辑关系与其存储的地址没有关系,而是用指针来说明

    链表的数据元素的组成部分:指针域数据域

    指针域用来存放指示数据元素之间的逻辑关系的指针

    数据域用来存放数据信息

    数据元素这种特殊的存储方式称之为结点(Node)

    画的示意图如下:

    注:https://www.cnblogs.com/ljangle/p/13036992.html

    C++中如何判断链表为空

    链表区分带头节点和不带头结点两种。假定链表节点指向下一节点的指针变量名为next。那么区分情况,判断空链表的方法为:
    
    1 带头节点。
    对于带头节点的链表,存在有不变的头结点head,这个节点并不保存任何数据,仅提供链表起始的一个标识。对于此类链表,判断为空的条件为head->next==NULL。当head的next值为NULL,这时链表为空。
    
    2 不带头结点。
    不带头结点的情况,链表的起始节点是可能变化的,但无论如何变化,必须有一个节点指针类型的变量保存实际上的第一个节点first。
    当first为空时,链表即为空。这时判断为空的条件为first==NULL。

    二.用编程语言实现链表

    数据结构单链表头插法和尾插法是什么意思?

    头插法: 头插法的实现相对简单 思路是将新形成的节点的下一个赋值为header

                   再把新形成的节点地址传给header即将header向前移动

    1.

    头插法是新增节点总是插在头部,以带头结点链表为例,链表头指针是Head,新增节点p
    那么
    p->next = Head->next;
    Head->next = p;
    如果是不带头结点的链表那么对应是
    p->next = Head;
    Head = p;

     头插法创建链表的根本在于深刻理解最后两条语句

     1 node->next = head->next; // 将头指针所指向的下一个结点的地址,赋给新创建结点的next

     2 head->next = node; // 将新创建的结点的地址赋给头指针的下一个结点 

    2.怎么实现链表翻转

    单链表翻转很容易理解,例如:

    输入: NODE1->NODE2->NODE3->NODE4->NODE5->NULL

    输出: NODE5->NODE4->NODE3->NODE2->NODE1->NULL

    3.怎么判断链表有环

  • 相关阅读:
    LeetCode Single Number
    Leetcode Populating Next Right Pointers in Each Node
    LeetCode Permutations
    Leetcode Sum Root to Leaf Numbers
    LeetCode Candy
    LeetCode Sort List
    LeetCode Remove Duplicates from Sorted List II
    LeetCode Remove Duplicates from Sorted List
    spring MVC HandlerInterceptorAdapter
    yum
  • 原文地址:https://www.cnblogs.com/nh34546/p/14171615.html
Copyright © 2011-2022 走看看