单链表:
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以节点来表示的,每个节点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个节点的地址数据。
package com.dataStructure.linearTable.singleLinearTable;
public class Star {
private int no;
private String name;
private String nickName;
private Star next = null;//指向堆中下一个Star实例
public Star() {
super();
}
public Star(int no, String name, String nickName) {
this.no = no;
this.name = name;
this.nickName = nickName;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Star getNext() {
return next;
}
public void setNext(Star next) {
this.next = next;
}
}
package com.dataStructure.linearTable.singleLinearTable;
public class Test {
public static void main(String[] args) {
//创建一个空的Star作为链表的头
Star head = new Star();
Star star1 = new Star(1,"Avril Lavigne","Rock Beauty Girl");
Star star2 = new Star(10,"Madonna Ciccone","Ray of Light");
Star star3 = new Star(3,"Beyonce Giselle","Black Dimond");
Star star4 = new Star(4,"Britney Spears","Sweaty");
Star star5 = new Star(7,"Whitney Houston","When You Believe");
addStarBySequence(head, star1);
addStarBySequence(head, star2);
addStarBySequence(head, star3);
addStarBySequence(head, star4);
addStarBySequence(head, star5);
showStar(head);
System.out.println("========================================");
removeStar(head, star5);
showStar(head);
}
private static void showStar(Star head){
Star current = head;
while(current.getNext() != null){
System.out.println("ID :"+current.getNext().getNo()+"Name :"+current.getNext().getName());
current = current.getNext();
}
}
//单链表的添加操作
private static void addStar(Star head, Star star){
//1)直接在尾部加(找到链表尾部,不能动头节点)
Star current = head;
while(null != current.getNext()){//如果当前节点的next不为空
current = current.getNext();
}
//如果为空表示你退出循环,即表示队尾
current.setNext(star);
//按照顺序加(确保添加有序)
}
private static void addStarBySequence(Star head, Star star){
if(head == null){
return;
}
Star current = head;
while(null != current.getNext()){
if(current.getNext().getNo() >= star.getNo()){
break;
}
current = current.getNext();
}
if(current.getNext() != null && current.getNext().getNo() >= star.getNo()){
star.setNext(current.getNext());
}
current.setNext(star);
}
/**
* 从链表中删除某个元素
* @param head
* @param star
*/
private static void removeStar(Star head, Star star){
if(head == null || star == null){
return;
}
Star current = head;
boolean flag = false;
while(current.getNext()!= null){
if(current.getNext().getNo() == star.getNo()){
flag = true;
break;
}
current = current.getNext();
}
if(!flag){
return;
}
//让当前元素直接指向当前元素的下一个元素的下一个元素,中间这个没有引用指向他,被视为垃圾
current.setNext(current.getNext().getNext());
}
}