06-单向链表

1,链表是以节点的方式来存储的;

专注于为中小企业提供成都做网站、网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业巴楚免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

2,每个节点包含data域、next域:指向下一个节点;

3,链表的每个节点不一定是连续的;

4,链表分带头节点的链表,和不带头节点的链表,根据实际情况来决定。

带头节点的单向链表

头节点

1,存放具体数据

2,作用就是作为单链表的头

带头节点的单链表

添加(创建)

1,先创建一个头结点

2,添加其他节点,直接加入到链表的最后

package com.datastack.linkedlist;

public class SimpleLinkedList {
	public HeroNode head = new HeroNode(0,"","");//头结点
	
	/**
	 * 添加方法:不考虑顺序添加
	 * 1,找到最后节点
	 * 2,将最后节点的next指向 新的节点
	 * @param heroNode
	 */
	public void add(HeroNode heroNode){
		HeroNode temp = head;
		while(true){
			if(temp.next == null){
				break;
			}
			temp = temp.next;
		}
		temp.next = heroNode;
	}
	
	/**
	 * 按编号从小到大顺序添加
	 * @param heroNode
	 */
	public void addByOrder(HeroNode heroNode){
		HeroNode temp = head;
		boolean flag = false;//标识添加的编号是否存在
		while(true){
			if(temp.next == null){
				break;
			}
			if(temp.next.no > heroNode.no){
				break;
			}else if(temp.next.no == heroNode.no){
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag){
			System.out.printf("准备插入的英雄的编号 %d 已存在,不能添加\n",heroNode.no);
		}else{
			heroNode.next = temp.next;
			temp.next = heroNode;
		}
		
	}

	/**
	 * 显示链表
	 */
	public void list(){
		//判断链表是否为空
		if(head.next == null){
			System.out.println("链表为空");
			return;
		}
		HeroNode temp = head.next;
		while(true){
			if(temp == null){
				break;
			}
			System.out.println(temp);
			temp = temp.next;
		}
	}
	
	/**
	 * 修改
	 * @param heroNode
	 */
	public void update(HeroNode heroNode){
		HeroNode temp = head.next;
		boolean flag = false;//表示是否找到该节点
		while(true){
			if(temp == null){
				break;
			}
			if(temp.no == heroNode.no){
				flag = true;
				break;
			}
			temp  = temp.next;
		}
		if(flag){
			temp.name = heroNode.name;
			temp.nickname = heroNode.nickname;
		}else{
			System.out.println("没有找到要修改的编号");
		}
	}
	
	/**
	 * 删除
	 * @param heroNode
	 */
	public void delete(int no){
		HeroNode temp = head;
		boolean flag = false;//是否找到要删除的节点
		while(true){
			if(temp.next == null){
				break;
			}
			if(temp.next.no == no){
				flag = true;
				break;
			}
			temp = temp.next;
		}
		if(flag){
			temp.next = temp.next.next;
		}else{
			System.out.println("没有找到要删除的节点");
		}
		
	}
}
package com.datastack.linkedlist;

public class HeroNode {
	public int no;
	public String name;
	public String nickname;//昵称
	public HeroNode next;//下一个节点
	
	//构造器
	public HeroNode(int no,String name,String nickname){
		this.no = no;
		this.name = name;
		this.nickname = nickname;
	}
	
	//打印
	public String toString(){
		return "HeroNode [no="+no+",name="+name+",nickname="+nickname+"]";
	}
	
}
package com.datastack.linkedlist;

public class SimpleLinkedListDemo {
	public static void main(String[] args) {
		HeroNode hero1 = new HeroNode(1, "宋江", "及时雨");
		HeroNode hero3 = new HeroNode(3, "吴用", "智多星");
		HeroNode hero2 = new HeroNode(2, "卢俊义", "王麒麟");
		HeroNode hero4 = new HeroNode(4, "林冲", "爆炸头");
		
		SimpleLinkedList linkedList = new SimpleLinkedList();
		linkedList.addByOrder(hero1);
		linkedList.addByOrder(hero4);
		linkedList.addByOrder(hero2);
		linkedList.addByOrder(hero3);
		
		linkedList.list();
		
		HeroNode heroNode = new HeroNode(2, "wuyong", "wy");
		linkedList.update(heroNode);
		System.out.println("修改后");
		linkedList.list();
		System.out.println("删除后");
		linkedList.delete(1);
		linkedList.list();
		System.out.println("删除后");
		linkedList.delete(4);
		linkedList.list();
	}
}

本文题目:06-单向链表
网页地址:http://scyanting.com/article/joecio.html