个人学习感想

#链表学习java
话不多说,上编程。

import java.util.LinkedList;
import java.lang.Object;
public class Linked{
    private class Node{              //定义结点
        private int t;
        private Node next;
        public Node(int t,Node next){
            this.t=t;
            this.next=next;
        }
       public Node(int t){
           this(t,null);
       }
    }
    private Node head;            //定义全局变量
    private int size=0;
    public Linked(){
        this.head=null;
        this.size=0;
    }
public void addFirst(int i){        //定义一个头部增加变量的方法
    Node node=this.head;            //新定义一个节点
    node.t=i;           
    node.next=head;                 //这个节点指向头节点
    head=node;                      //再用head表示头节点
}
public void add(int t,int index)    //定义一个指定增加的节点
{
    Node preNode=this.head;
    for(int i=0;i<index-1;i++)
    {
        preNode=preNode.next;      //将链表指向指定的数的前一个节点
    }
    Node node=new Node(t);
    node.next=preNode.next;         //前一个节点指向指定节点的下一个节点
    preNode.next=node;              //我这好像写错了???
    this.size++;
}
public void remove(int t){       //定义删除的方法
    if(head==null)                //先判断头节点是否为空  
    System.out.println("无元素可删除");
     while(head!=null&&head.t==t){     //判断接下来的节点是否为空
         head=head.next;
         this.size--;
     }
     Node cur=this.head;
     while(cur!=null&&cur.next!=null){
            if(cur.next.t==t)          //判断是否为指定节点时
            {
                cur.next=cur.next.next;    //从指定节点的前一个直接跳到后一个,从而删除指定的节点
                this.size--;
            }
            else
            cur=cur.next;
     }
}
public void fund(int t){       //定义查找的方法
    Node node=this.head;
    int f=0;
    while(node.next!=null){ 
        if(node.t==t)         //当相等时,即查找到这个数,可以输出yes
        {System.out.println("yes");
        f=1;
        break;}
        else
        node=node.next;
    }
if(f==0)             //f=0意味着没有查找到,输出no
System.out.println("no");
}
public static void main(String[] args){
 Linked linked=new Linked();   //new一个新对象??
 for(int i=1;i<7;i++)
 {
     linked.addFirst(i);         //为链表输入值
     System.out.println(linked);
 }
 linked.add(2,20);            //接下来就是对各个方法的检测
 System.out.println(linked);
 linked.addFirst(10);
 System.out.println(linked);
 linked.fund(3);
 linked.fund(9);
 linked.remove(2);
 System.out.println(linked);
}
}  

此程序参照了一位博主
https://blog.csdn.net/weixin_36605200/article/details/88804537?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164922502316780274167041%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=164922502316780274167041&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-88804537.142v5pc_search_quality_down,157v4control&utm_term=java%E4%B8%AD%E7%9A%84%E9%93%BE%E8%A1%A8&spm=1018.2226.3001.4187
简单的单向链表逻辑和c的链表有一定程度的相似,但是在写法上有差别,个人学的不是很清楚,代码参考了博主的才勉强写出来,学的挺差的,自我反省,自我反省。
以上代码的运行结果为:

Exception in thread "main" java.lang.NullPointerException
        at Linked$Node.access$002(Linked.java:4)
        at Linked.addFirst(Linked.java:23)
        at Linked.main(Linked.java:75)`
ed.java:4)
        at Linked.addFirst(Linked.java:23)
        at Linked.main(Linked.java:75)  
        ```
没有正确的结果。哎。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值