单链表
package use1;
public class GoodsNode {
public int id;
public String name;
public double price;
public GoodsNode next;
public GoodsNode(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "GoodsNode{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
//计算单链表中节点的个数
public int getLength(){
if(node.next==null){
return 0;
}
GoodsNode temp=node.next;
int length=0;
while (temp!=null){
length++;
temp=temp.next;
}
return length;
}
}
package use1;
public class DLLinkedlist {
private GoodsNode node =new GoodsNode(0,"",0.0);
//向链表中添加节点
public void add(GoodsNode goodsNode){
GoodsNode temp=node;
while (true){
if(temp.next==null){
break;
}
temp=temp.next;
}
temp.next=goodsNode;
}
//按照商品id值进行添加,id从小到大添加进来
public void addOrder(GoodsNode goodsNode){
GoodsNode temp=node;
boolean flg=false;
while (true){
if(temp.next==null){
break;
}
if ((temp.next.id>goodsNode.id)){
break;
}else if(temp.next.id==goodsNode.id){
flg=true;
break;
}
temp=temp.next;
}
if(flg){
System.out.println("重复插入");
}else{
goodsNode.next=temp.next;
temp.next=goodsNode;
}
}
//修改结点
public void updateNode(GoodsNode goodsNode){
//如果链表为空
if(node.next==null){
System.out.println("链表为空");
}
GoodsNode temp=node.next;
//标识符,表示找到了节点
boolean flg =false;
while (true){
if(temp==null){
break;
}
if(temp.id==goodsNode.id){
flg=true;
break;
}
temp=temp.next;
}
if(flg){
temp.name=goodsNode.name;
temp.price=goodsNode.price;
}else{
System.out.println("未找到目标节点");
}
}
//删除节点,根据节点编号进行删除
public void delNode(int id){
GoodsNode temp=node;
boolean flg =false;
while (true){
if(temp.next==null){
break;
}
if(temp.next.id==id){
flg=true;
break;
}
temp=temp.next;
}
if(flg){
temp.next=temp.next.next;
}else{
System.out.println("未找到所要删除的节点");
}
}
//查看链表中节点元素
public void list(){
if(node.next==null){
System.out.println("为空");
}
GoodsNode temp=node.next;
while (true){
if(temp==null){
break;
}
System.out.println(temp);
temp=temp.next;
}
}
}
package use1;
public class LinkedTest {
public static void main(String[] args){
DLLinkedlist linkedlist =new DLLinkedlist();
DLLinkedlist linkedlist1 =new DLLinkedlist();
GoodsNode goodsNode1=new GoodsNode(1,"小可学妹",1999.99);
GoodsNode goodsNode2=new GoodsNode(2,"小猪学妹",2999.99);
GoodsNode goodsNode3=new GoodsNode(3,"小狗学妹",3999.99);
GoodsNode goodsNode4=new GoodsNode(4,"小猫学妹",4999.99);
linkedlist.add(goodsNode1);
linkedlist.add(goodsNode2);
linkedlist.add(goodsNode3);
linkedlist.add(goodsNode4);
linkedlist1.addOrder(goodsNode4);
linkedlist1.addOrder(goodsNode3);
linkedlist1.addOrder(goodsNode1);
linkedlist1.addOrder(goodsNode2);
System.out.println(linkedlist.getLength());
linkedlist.list();
//linkedlist1.list();
linkedlist.updateNode(new GoodsNode( 2,"小狼学妹",66.00));
linkedlist.list();
linkedlist.delNode(3);
linkedlist.list();
}
}
双向链表
package use1;
public class BookNode {
public int id;
public String name;
public double price;
//节点下一个节点 直接后继
public BookNode next;
//上一个节点 直接前驱
public BookNode pre;
public BookNode(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
}
}
package use1;
import java.awt.print.Book;
public class DualLinkedList {
private BookNode head = new BookNode(0,"",0.0);
/**
* 添加结尾新的节点
* @param newNode
*/
public void addLast(BookNode newNode){
BookNode temp = head;
while (true){
//如果第一次进来则进入,表示双向链表是空数据
if (temp.next == null){
break;
}
temp = temp.next;
}
/**
* 需要把新的节点给上一个节点
* 需要把上一个节点next指向新的节点
*/
temp.next = newNode;
newNode.pre = temp;
}
/**
* 修改节点
* 条件:双向链表中的每一个结点的id和修改的id对比,如果对比成功,则进行修改该结点
* ,如果没有对比成功,双向链表中未找到目标结点
*/
public void updateNode(BookNode node){
//是否是空链表
if (head.next == null){
System.out.println("空链表...");
return;
}
BookNode temp = head.next;
boolean flg = false;
while (true){
if (temp == null){
break;
}
if (temp.id == node.id){
flg = true;
break;
}
temp = temp.next;
}
if (flg){
temp.name = node.name;
temp.price = node.price;
}else {
System.out.println("未找到要修改的节点...");
}
}
/**
* 双向链表删除
* 条件:根据id编号进行删除节点
*/
public void delNode(int id){
if (head.next == null){
System.out.println("空链表...");
return;
}
BookNode temp = head.next;
boolean flg = false;
while (true){
if (temp == null){
break;
}
if (temp.id == id){
flg = true;
break;
}
temp = temp.next;
}
if (flg){
temp.pre.next = temp.next;
if (temp.next !=null){
temp.next.pre = temp.pre;
}
}else {
System.out.println("未找到该结点...");
}
}
}
package use1;
public class Test02 {
public static void main(String[] args){
DualLinkedList dualLinkedList = new DualLinkedList();
BookNode bookNode1 = new BookNode(1,"红楼梦",66.00);
BookNode bookNode2 = new BookNode(2,"西游记",66.00);
BookNode bookNode3 = new BookNode(3,"水浒传",66.00);
BookNode bookNode4 = new BookNode(4,"三国演义",66.00);
dualLinkedList.addLast(bookNode1);
dualLinkedList.addLast(bookNode2);
dualLinkedList.addLast(bookNode3);
dualLinkedList.addLast(bookNode4);
//dualLinkedList.delNode(1);
dualLinkedList.updateNode(new BookNode(3,"计算机",66.00));
System.out.println("");
}
}