ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

单向链表

2019-11-10 22:01:13  阅读:193  来源: 互联网

标签:node temp 单向 next 链表 flag 节点


一、链表是什么?

单向链表Linked List:是一种在物理上非连续、非顺序的数据结构,由若干节点(node)所组成。

  而节点包括两部分,一部分是存放数据的变量data,另一部分是指向下一个节点的指针next。

   链表的第1个节点被称为头节点,最后1个节点被称为尾节点尾节点的next指针指向空

   

注意:链表分为带头节点的链表 和 没有头节点的链表。头节点不存放数据内容。

   数组是连续存储的,而链表的各个节点不一定是连续存储。

   数组能根据下标随机访问,而链表只能从头节点开始通过一级一级的节点去寻找。

   数组在内存中的存储方式是顺序存储,链表在内存中的存储方式则是随机存储。

   

二、单向链表的基本操作

链表在查找节点在查,链表不像数组那样可以通过下标快速进行定位,只能从头节点开始向后一个一个节点逐一查找(遍历)。--辅助指针

//增加节点
  //头部插入---中间插入---尾部插入
  //头部插入和尾部插入---改变next属性指向插入节点
  //中间插入---使得 插入位置的上一个元素的节点 指向 插入元素,而插入元素的 next 属性指向上一个元素原本的下一个节点--利用辅助指针

      HeroNode temp = head; //创建--辅助指针
      boolean flag = false; //flag标志添加的编号是否存在,默认false
      while(true) {
        if(temp.next == null) { //当为链表末端时,
          break;
        }
        if(temp.next.no > node.no) {
          break; //这里是遵循序号规则大小排序位置找到
        }else if(temp.next.no == node.no) {
          flag = true; //编号存在
          break;
        }
      temp = temp.next; //继续遍历洗下一个元素
      }//--循环结束
      //判断flag的值
      if(flag) {
        System.out.println("准备插入的编号已经存在");
      }else {
      //插入链表,temp的后面
        node.next = temp.next;
        temp.next = node;
      }

//删除节点--节点无法自我删除
  //利用 辅助指针 找到要删除元素的上一个位置,改变其next属性,指向该next属性的下一个next

    public void del(int index) {
      //创建辅助指针
    HeroNode temp = head;
    boolean flag = false; //判断是否存在该节点
    while(true) {
      if(temp.next == null) {
         System.out.println("该链表为空");
        break;
       }
      if(index == temp.next.no) {
        flag = true;
        break;
       }
    temp = temp.next;
    }

    //判断是否要删除节点

    if(flag) {
      temp.next = temp.next.next;//使得要删除节点的上一个节点的next属性指向,下下个元素。
    }else {
      System.out.printf("要删除的%d节点不存在\n",index );
      }
    }

//修改节点
  //找到要修改的节点

  public void updateNode(HeroNode node) {
    //创建辅助指针
    HeroNode temp = head;
    boolean flag = false;//表示是否找到节点
    while(true) {
      if(temp == null) {
        break;//遍历完节点
      }
      if(temp.no == node.no) {
        flag = true;
        break;
      }
    temp = temp.next;//遍历下一个元素
    }
    //根据flag值判断是否修改节点
    if(flag) {
      temp.name = node.name;
      temp.nickname = node.nickname;
    }else {
    System.out.println("没有找到要修改的编号节点");
      }
    }

 

标签:node,temp,单向,next,链表,flag,节点
来源: https://www.cnblogs.com/Tanggula-pioneer/p/11825745.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有