06单链表
Posted linux777
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了06单链表相关的知识,希望对你有一定的参考价值。
1,链表是以节点的方式来存储的;
2,每个节点包含data域、next域:指向下一个节点;
3,链表的每个节点不一定是连续的;
4,链表分带头节点的链表,和不带头节点的链表,根据实际情况来决定。
带头节点的单向链表
头节点
1,存放具体数据
2,作用就是作为单链表的头
带头节点的单链表
添加(创建)
1,先创建一个头结点
2,添加其他节点,直接加入到链表的最后
1 package com.datastack.linkedlist; 2 3 public class SimpleLinkedList { 4 public HeroNode head = new HeroNode(0,"","");//头结点 5 6 /** 7 * 添加方法:不考虑顺序添加 8 * 1,找到最后节点 9 * 2,将最后节点的next指向 新的节点 10 * @param heroNode 11 */ 12 public void add(HeroNode heroNode){ 13 HeroNode temp = head; 14 while(true){ 15 if(temp.next == null){ 16 break; 17 } 18 temp = temp.next; 19 } 20 temp.next = heroNode; 21 } 22 23 /** 24 * 按编号从小到大顺序添加 25 * @param heroNode 26 */ 27 public void addByOrder(HeroNode heroNode){ 28 HeroNode temp = head; 29 boolean flag = false;//标识添加的编号是否存在 30 while(true){ 31 if(temp.next == null){ 32 break; 33 } 34 if(temp.next.no > heroNode.no){ 35 break; 36 }else if(temp.next.no == heroNode.no){ 37 flag = true; 38 break; 39 } 40 temp = temp.next; 41 } 42 if(flag){ 43 System.out.printf("准备插入的英雄的编号 %d 已存在,不能添加 ",heroNode.no); 44 }else{ 45 heroNode.next = temp.next; 46 temp.next = heroNode; 47 } 48 49 } 50 51 /** 52 * 显示链表 53 */ 54 public void list(){ 55 //判断链表是否为空 56 if(head.next == null){ 57 System.out.println("链表为空"); 58 return; 59 } 60 HeroNode temp = head.next; 61 while(true){ 62 if(temp == null){ 63 break; 64 } 65 System.out.println(temp); 66 temp = temp.next; 67 } 68 } 69 70 /** 71 * 修改 72 * @param heroNode 73 */ 74 public void update(HeroNode heroNode){ 75 HeroNode temp = head.next; 76 boolean flag = false;//表示是否找到该节点 77 while(true){ 78 if(temp == null){ 79 break; 80 } 81 if(temp.no == heroNode.no){ 82 flag = true; 83 break; 84 } 85 temp = temp.next; 86 } 87 if(flag){ 88 temp.name = heroNode.name; 89 temp.nickname = heroNode.nickname; 90 }else{ 91 System.out.println("没有找到要修改的编号"); 92 } 93 } 94 95 /** 96 * 删除 97 * @param heroNode 98 */ 99 public void delete(int no){ 100 HeroNode temp = head; 101 boolean flag = false;//是否找到要删除的节点 102 while(true){ 103 if(temp.next == null){ 104 break; 105 } 106 if(temp.next.no == no){ 107 flag = true; 108 break; 109 } 110 temp = temp.next; 111 } 112 if(flag){ 113 temp.next = temp.next.next; 114 }else{ 115 System.out.println("没有找到要删除的节点"); 116 } 117 118 } 119 }
1 package com.datastack.linkedlist; 2 3 public class HeroNode { 4 public int no; 5 public String name; 6 public String nickname;//昵称 7 public HeroNode next;//下一个节点 8 9 //构造器 10 public HeroNode(int no,String name,String nickname){ 11 this.no = no; 12 this.name = name; 13 this.nickname = nickname; 14 } 15 16 //打印 17 public String toString(){ 18 return "HeroNode [no="+no+",name="+name+",nickname="+nickname+"]"; 19 } 20 21 }
1 package com.datastack.linkedlist; 2 3 public class SimpleLinkedListDemo { 4 public static void main(String[] args) { 5 HeroNode hero1 = new HeroNode(1, "宋江", "及时雨"); 6 HeroNode hero3 = new HeroNode(3, "吴用", "智多星"); 7 HeroNode hero2 = new HeroNode(2, "卢俊义", "王麒麟"); 8 HeroNode hero4 = new HeroNode(4, "林冲", "爆炸头"); 9 10 SimpleLinkedList linkedList = new SimpleLinkedList(); 11 linkedList.addByOrder(hero1); 12 linkedList.addByOrder(hero4); 13 linkedList.addByOrder(hero2); 14 linkedList.addByOrder(hero3); 15 16 linkedList.list(); 17 18 HeroNode heroNode = new HeroNode(2, "wuyong", "wy"); 19 linkedList.update(heroNode); 20 System.out.println("修改后"); 21 linkedList.list(); 22 System.out.println("删除后"); 23 linkedList.delete(1); 24 linkedList.list(); 25 System.out.println("删除后"); 26 linkedList.delete(4); 27 linkedList.list(); 28 } 29 }
以上是关于06单链表的主要内容,如果未能解决你的问题,请参考以下文章