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){ //增加一个结点按照 no排序
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){ //根据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){ //修改no相同的数据
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){ //打印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 ;
}
}
}
数据结构 单向链表
猜你喜欢
转载自blog.csdn.net/guyjy/article/details/106584322
今日推荐
周排行