#链表学习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)
```
没有正确的结果。哎。