package com.数据结构;
import java.util.ArrayList;
import java.util.Stack;
public class 单向链表 {
public static void main(String[] args) {
Node node1 = new Node(1,"宋江","及时雨");
Node node2 = new Node(5,"林冲","豹子头");
Node node3 = new Node(1,"宋江","及时雨");
Node node4 = new Node(3,"吴用","智多星");
LinkedOne linkedOne = new LinkedOne() ;
linkedOne.print();
linkedOne.sortAdd(node1);
linkedOne.sortAdd(node2);
linkedOne.sortAdd(node3);
linkedOne.sortAdd(node4);
linkedOne.print();
linkedOne.del(1);
linkedOne.del(1);
Node node5 = new Node(5,"小林","豹子头头~~~");
linkedOne.mod(node5);
linkedOne.mod(node1);
linkedOne.seek(5);
linkedOne.seek(1);
linkedOne.print();
System.out.println("--------------------------");
linkedOne.reverseLinked();
linkedOne.print();
System.out.println("--------------------------");
linkedOne.reverseprintln();
}
}
class Node{
public int no ;
public String name;
public String id ;
public Node next ;
public Node() {
}
public Node(int no , String name , String id){
this.id = id ;
this.name = name ;
this.no = no;
}
@Override
public String toString() {
return "Node{" +
"no=" + no +
", name='" + name + '\'' +
", id='" + id + '\'' +
'}';
}
}
class LinkedOne{
private Node head = new Node();
public LinkedOne(){
}
public void add(Node newNode){
Node temp = head;
while(temp.next!=null){
temp= temp.next;
}
temp.next = newNode ;
}
public void sortAdd(Node newNode){
Node temp = head ;
boolean flag = false ;
while(true){
if(temp.next==null){
flag = true;
break;
}else if(temp.next.no==newNode.no){
break;
}else if(temp.next.no>newNode.no){
flag = true;
break;
}
temp = temp.next ;
}
if(flag){
newNode.next = temp.next;
temp.next = newNode ;
}else {
System.out.println("数据已经存在了 插入失败~~~");
}
}
public void del(int no){
boolean flag = false ;
Node temp = head ;
while(true){
if(temp.next==null){
break ;
}else if(temp.next.no==no){
flag = true ;
break ;
}
temp = temp.next ;
}
if(flag){
temp.next = temp.next.next;
System.out.println("删除成功~~~\n剩余数据:");
print();
}else{
System.out.println("删除失败 数据并不存在~~~");
}
}
public void mod(Node newNode){
boolean flag = false ;
Node temp = head ;
while(true){
if(temp.next==null){
break;
}else if(temp.next.no==newNode.no){
flag = true ;
break ;
}
temp = temp .next;
}
if(flag){
newNode.next = temp.next.next ;
temp.next = newNode;
System.out.println("修改成功~~~\n修改后的数据:");
print();
}else{
System.out.println("修改失败 数据并不存在~~~");
}
}
public void seek(int no){
boolean flag = false ;
Node temp = head ;
while(true){
if(temp.next==null){
break;
}else if(temp.next.no==no){
flag = true ;
break;
}
temp = temp.next ;
}
if(flag){
System.out.println(temp.next);
}else{
System.out.println("没找到~~~");
}
}
public void reverseLinked(){
Node reverseHead = new Node();
Node reverseTemp = head.next ;
while(reverseTemp!=null){
Node reversrTemp1=reverseTemp.next;
reverseTemp.next=reverseHead.next;
reverseHead.next=reverseTemp;
reverseTemp=reversrTemp1;
}
head.next = reverseHead.next;
}
public void reverseprintln(){
ArrayList<String> arr = new ArrayList<>();
Stack<String> stack = new Stack<>();
Node temp = head.next;
while(temp!=null){
arr.add(temp.toString());
stack.push(temp.toString());
temp = temp.next;
}
Object[] str = arr.toArray();
for(int i=str.length-1;i>=0;i--){
System.out.println(str[i]);
}
while(stack.size()>0){
System.out.println(stack.pop());
}
}
public void print(){
Node temp = head.next ;
if(temp == null){
System.out.println("链表为空,打印失败~~~");
return ;
}
while(temp!=null){
System.out.println(temp);
temp = temp.next ;
}
}
}