单链表的设计和实现

程序代码如下:

package com.jing.day2;
/**
 * 链表的增删改查操作
 * 
 * 场景:水浒传英雄排序
 * 
 * 分析:
 * 对于链表的操作其实相对来说是比较简单的,只需要从头结点开始遍历,找到需要的位置一切就搞定了。
 * 这里需要注意两个问题:不要移动头结点,借助一个临时的指针或者说引用            不要忘记移动指针,否则很容易造成死循环。
 * 
 * @author Administrator
 *
 */
public class LinkedListDemo {
	public static void main(String[] args) {
		//测试遍历英雄的方法,这里采用传统方式构建一个链表
//		Hero head = new Hero();
//		Hero h1 = new Hero(1,"宋江","及时雨");
//		Hero h2 = new Hero(2,"吴用","智多星");
//		Hero h3 = new Hero(3,"卢俊义","玉麒麟");
//		head.next = h1;
//		h1.next = h2;
//		h2.next = h3;
//		iteratorHero(head);
		//测试添加英雄
		Hero head = new Hero();
		Hero h1 = new Hero(1,"宋江","及时雨");
		addHero(head, h1);
		Hero h2 = new Hero(6,"林冲","豹子头");
		addHero(head,h2);
		iteratorHero(head);
		System.out.println("添加英雄后===========");
		Hero h3 = new Hero(2,"吴用","智多星");
		addHero(head,h3);
		iteratorHero(head);
		System.out.println("删除英雄后");
		deleteHero(head, h2);
		iteratorHero(head);
		
		System.out.println("更新英雄后");
		h3 = new Hero(2,"卢俊义","玉麒麟");
		updateHero(head, h3);
		iteratorHero(head);
		
	}
	/**
	 * 查看所有的英雄
	 * @param head
	 */
	public static void iteratorHero(Hero head){
		Hero cur = head;
		while(cur.next != null){
			System.out.println(cur.next);
			cur = cur.next;
		}
	}
	/**
	 * 添加英雄
	 * @param head
	 * @param newHero
	 */
	public static void addHero(Hero head,Hero newHero){
		//添加到最后	将指针移到最后,然后添加
//		Hero cur = head;
//		while(cur.next != null){
//			cur = cur.next;
//		}
//		cur.next = newHero;
		//按照排名顺序添加
		Hero cur = head;
		while(cur.next != null){
			if(cur.next.no >= newHero.no){
				break;
			}
			cur = cur.next;
		}
		newHero.next = cur.next;
		cur.next = newHero;
	}
	/**
	 * 删除英雄
	 * @param head
	 * @param destHero
	 */
	public static void deleteHero(Hero head,Hero destHero){
		Hero cur = head;
		while(cur.next != null){
			if(cur.next.no == destHero.no){
				break;
			}
			cur = cur.next;
		}
		cur.next = cur.next.next;
	}
	
	public static void updateHero(Hero head,Hero destHero){
		Hero cur = head;
		while(cur.next != null){
			if(cur.next.no == destHero.no){
				break;
			}
			cur = cur.next;
		}
		cur.next.name = destHero.name;
		cur.next.nikename = destHero.nikename;
	}
	
	//设计英雄
	static class Hero{
		public int no;
		public String name;
		public String nikename;
		public Hero next;
		public Hero(){}
		//排名、姓名、昵称
		public Hero(int no, String name, String nikename) {
			this.no = no;
			this.name = name;
			this.nikename = nikename;
		}
		@Override
		public String toString() {
			return "Hero [no=" + no + ", name=" + name + ", nikename="
					+ nikename + "]";
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值