java 实现单向链表的反转及单向链表的各种操作day1

package node;

import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
import java.util.Stack;
public class model {
private node head=new node(1,“aa”);
public StacknodeStack=new Stack<>();

public void add(node p)
{
    //head 不能动,p为添加的结点
    node temp=head;
    //遍历链表
    while(true) {
        if(temp.next==null){
            break;
        }
        temp=temp.next;
    }
    temp.next=p;
}
public node getHead() {
    return head;
}
public void addorder(node p){
    //因为头节点不动,需要复制指针,找前结点,或者插入不了
    node temp=head;
    boolean flag=false;//标识符号是否存在
    while(true){
        if(temp.next==null){//插入为末尾
            break;
        }
        if(temp.next.data>p.data){//找到位置了插入temp.next
            break;
        }else if(temp.next.data==p.data){
            flag=true;//编号存在不能添加
            break;

        }//找到插入位置的temp
        
        temp=temp.next;//后移
    }
    if(flag){
        System.out.println("data存在了");

    }else{
        //charu
        p.next=temp.next;
        temp.next=p;
    }


}
//显示链表
public void list(){
    if(head.next==null){
        System.out.println("kog");
    }
    node p=head.next;
    while(true){
        //判断是否为最后
        if(p.next==null){
            System.out.println(p);
            break;
        }
        System.out.println(p);
        p=p.next;//后移动
    }
}
//反向输出链表 用栈
public void pain(node head){
    if(head.next==null)
        return ;
    node p=head;
    while(p!=null){
        nodeStack.push(p);
        p=p.next;

    }
    while(nodeStack.size()>0){
        System.out.println(nodeStack.pop());
    }
}
//列表反转
/*
思想 创建一个rehead ,遍历数组,把节点放入到rehead的后面,头插法
rehead的结点占位 最后让最开始的头节点取代rehead结点
注意rehead为每次的头节点,但是节点是头插法,每次放入到前面
 */
public  void readd(node phead){
    node pnode=phead.next;
    node next=null;//指向当前结点的下一个结点
    node rehead=new node();

        //遍历
    while(pnode!=null){
        next=pnode.next;//储存pnode的下一个结点
        pnode.next=rehead.next;
        rehead.next=pnode;
        pnode=next;
    }
    phead.next=rehead.next;




}

public static void main(String[] args) {
    node p1=new node(1,"ssss");
    node p2=new node(2,"aaa");
    node p3=new node(3,"s5s");
    node p4=new node(4,"ss5ss");
    model list1=new model();
    model list2=list1;
    list1.addorder(p2);
    list1.addorder(p3);
    list1.addorder(p1);
    list1.addorder(p4);
    list1.list();
    list1.pain(list1.getHead());
    list1.list();

}

}

package node;
public class node {
public int data;
public String name;
public node next;
public node(int data,String name)
{
this.data=data;
this.name=name;
}
public node(){}
//显示方便重写tostring

@Override
public String toString() {
    return "data"+data+"name"+name;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值