双向链表的基本实现,
删除
修改
添加(根据id有序添加和无序直接插入的添加)
显示所有的节点
package com.it.likedList;
import sun.awt.image.PixelConverter;
/**双向链表的实现(增删查改)
* @author Snail-Bo
* @date 2020/3/31 16:16
*/
public class BidirectionalLinkedListDemo {
public static void main(String[] args) {
UserNode4 user1 = new UserNode4(1,"张三",1);
UserNode4 user2 = new UserNode4(2,"周六",2);
UserNode4 user3 = new UserNode4(3,"李四",3);
BidirectionalLinkedList linkedList = new BidirectionalLinkedList();
linkedList.add2(user1);
linkedList.add2(user3);
linkedList.add2(user2);
linkedList.showAll();
/* System.out.println("删除后:");
linkedList.deleteNode(4);
linkedList.showAll();*/
}
}
class BidirectionalLinkedList{
UserNode4 head = new UserNode4(0,null,0);
/**
* 无序插入
* @param userNode4
*/
public void add(UserNode4 userNode4){
UserNode4 temp = head;
boolean flag = false;
while (true){
if (temp.next==null){
flag=true;
break;
}
temp = temp.next;
}
if (flag){
temp.next=userNode4;
userNode4.pre=temp;
}else {
System.out.println("添加失败");
}
}
/**
* 按id顺序进行插入
* @param userNode4
*/
public void add2(UserNode4 userNode4){
UserNode4 temp = head;
boolean flag = false;
while (true){
if(temp.next==null){
break;
}
if (temp.next.getId()>userNode4.getId()){ //temp为要插入的节点的前一个节点
break;
}if(temp.getId()==userNode4.getId()){
flag=true;
break;
}
temp = temp.next;
}
if (flag){
System.out.println("该节点已经存在,添加失败");
}else {
if(temp.next!=null){ //判断是否为最后一个节点
userNode4.next=temp.next; //进行temp节点的后一个节点和当前节点的连接
temp.next.pre=userNode4;
}
temp.next=userNode4; //temp 节点和插入节点的连接
userNode4.pre=temp;
}
}
/**
* 修改节点
* @param userNode4
* @return
*/
public void updateNode(UserNode4 userNode4){
if(head.next==null){
System.out.println("链表为空");
return ;
}
UserNode4 cur = head.next;
boolean flag = false;
while(cur.next!=null){
if(cur.getId()==userNode4.getId()){
flag=true;
break;
}
cur= cur.next;
}
if(flag){
cur.setName(userNode4.getName());
cur.setNum(userNode4.getNum());
}else {
System.out.println("没有找到");
}
}
/**
* 删除节点
* @param id
*/
public void deleteNode(int id){
if (head.next==null){
System.out.println("链表为空");
return;
}
UserNode4 temp = head.next;
boolean flag = false;
while (temp!=null){
if (temp.getId()==id){ //直接找到要被删除的节点
flag=true;
break;
}
temp = temp.next;
}
if (flag){
temp.pre.next=temp.next;
if(temp.next!=null){ //判断是否为最后一个节点
temp.next.pre=temp.pre;
}
}else {
System.out.println("没有找到该"+id+"的id");
}
}
/**
* 查看所有的双向链表的节点
*/
public void showAll(){
if(head.next==null){
System.out.println("链表为空");
return;
}
UserNode4 temp = head.next;
while (temp!=null){
System.out.println(temp);
temp = temp.next;
}
}
}
class UserNode4{
private int id;
private String name;
private int num;
UserNode4 pre;
UserNode4 next;
public UserNode4(int id, String name, int num) {
this.id = id;
this.name = name;
this.num = num;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public UserNode4 getPre() {
return pre;
}
public void setPre(UserNode4 pre) {
this.pre = pre;
}
public UserNode4 getNext() {
return next;
}
public void setNext(UserNode4 next) {
this.next = next;
}
@Override
public String toString() {
return "UserNode4{" +
"id=" + id +
", name='" + name + '\'' +
", num=" + num +
/* ", pre=" + pre +*/
", next=" + next +
'}';
}
}