單向鏈表,本次寫的是含有頭指針的單向鏈表,有add()、delete()、和遍歷方法實現,基本思路都是採用指針法進行元素一一對應 來操作。
package com.chunying;
import java.util.Objects;
/**
* @author chunying
* @Date: 2020/7/1 0001
*/
// 單向鏈表帶頭指針 的實現 整體採用指針法進行增加、刪除以及遍歷
public class LinkedList {
private final HeroNode head = new HeroNode(null, "" , 0, "");
//單向鏈表的添加 直接判斷哪個元素是尾元素即可
public void add(HeroNode param) {
HeroNode temp = head;
while (true) {
if (temp.getNext() == null) {
break;
}else {
temp = temp.getNext();
}
}
temp.setNext(param);
}
//單向鏈表的有序添加 正序
public void addSort(HeroNode param) {
HeroNode temp = head;
HeroNode next = temp.getNext();
Integer rank = param.getRank();
//只有一個頭元素 直接加在頭指針後即可
if (next == null) {
temp.setNext(param);
return;
}
//除了頭元素、只有一個真實元素 將兩個元素比較即可
if (next.getNext() == null) {
if (rank >= next.getRank()) {
next.setNext(param);
}else {
head.setNext(param);
param.setNext(next);
}
return;
}
//有兩個及以上的真實元素 需要兩個臨時指針 拿到左邊元素和右邊元素後插入即可
while (true) {
//如果到最後一個元素了 直接插入到最後即可
if (next == null) {
temp.setNext(param);
}
if (rank >= temp.getRank() && rank <= next.getRank()) {
temp.setNext(param);
param.setNext(next);
break;
}
temp = next;
next = temp.getNext();
}
}
//單向鏈表的刪除 刪除尾元素
public void delete() {
HeroNode temp = head;
while (true) {
if (temp.getNext() != null && temp.getNext().getNext() == null) {
temp.setNext(null);
break;
}else {
temp = temp.getNext();
}
}
}
//指定元素刪除
public void delete(HeroNode heroNode) {
if (heroNode == null) {
return;
}
HeroNode temp = head;
HeroNode next = temp.getNext();
while (true) {
if (heroNode.equals(next)) {
temp.setNext(next.getNext());
break;
}
temp = next;
next = next.getNext();
//沒有元素與之對應
if (next == null) {
break;
}
}
}
//遍歷
public void show() {
HeroNode temp = head;
while (true) {
if (temp.getNext() == null ) {
System.out.println(temp);
break;
}else {
System.out.println(temp);
temp = temp.getNext();
}
}
}
public static void main(String[] args) {
HeroNode heroNode = new HeroNode(null, "宋江", 10, "及時雨");
HeroNode heroNode1 = new HeroNode(null, "零充", 5, "豹子頭");
HeroNode heroNode2 = new HeroNode(null, "無用", 3, "賽諸葛");
LinkedList linkedList = new LinkedList();
linkedList.addSort(heroNode);
linkedList.addSort(heroNode1);
linkedList.addSort(heroNode2);
// linkedList.delete();
linkedList.show();
}
}
//要添加的元素
class HeroNode {
private HeroNode next;
private String name;
private Integer rank;
private String nickName;
public HeroNode(HeroNode next, String name, Integer rank, String nickName) {
this.next = next;
this.name = name;
this.rank = rank;
this.nickName = nickName;
}
public HeroNode getNext() {
return next;
}
public void setNext(HeroNode next) {
this.next = next;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getRank() {
return rank;
}
public void setRank(Integer rank) {
this.rank = rank;
}
@Override
public String toString() {
return "HeroNode{" +
", name='" + name + '\'' +
", rank=" + rank +
", nickName='" + nickName + '\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
HeroNode heroNode = (HeroNode) o;
return Objects.equals(name, heroNode.name) &&
Objects.equals(rank, heroNode.rank) &&
Objects.equals(nickName, heroNode.nickName);
}
@Override
public int hashCode() {
return Objects.hash(name, rank, nickName);
}
}