程序代码如下:
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 + "]";
}
}
}