单链表的相关使用

1.单链表的概念
单链表由数据元素和所对于的索引构成,并且有头节点,并且头节点 的数据为空。
首先建立单链表:
要明白但链表的属性,即成员变量,成员变量private Node head; private int N;需要有头节点记录开始,和长度,即数组的长度。

private Node head; //头节点
 private int N//长度
 //成员变量

链表要添加新节点数据就必须要有建立新节点的方法和相关的类

private class Node {
        T data ;//T表示泛型,就是T可以代表所以类型的数据类型
        Node next;//一个新节点必须有标明下一个节点是什么


        public Node(T data, Node next) {
            this.data = data;  //依次传入
            this.next = next;
        }
    }
```//成员方法包括:对链表的初始化链表,查询链表是否为空,获取链表的长度,清空全部链表,获得某一位置上的值,
//向链表中加入元素,向链表指定位置加入值,移除某个位置上的元素,输出一个值查询链表中是否存在该值。
//第一对单链表的初始化:

```java
public void Link(){
   this.head=new Node(null,null)//先给头节点创建,内容为null,下一个元素也为null;
   this.N=0;//开始元素为零
}

//查看链表是否为空`

public boolean isempty() {
        return  N==0;

}
``//查看链表长度

```java
public int length(){
return N;//返回N的长度即可
}

//清空全部链表

public void clear(){


this.head.next=null;//头节点下一个节点为空即可
this.N=0; 
}

//获得某一位置上的值

public T get(int t){
Node n=head.next;//现将头节点指向第一个元素
for(int index =0;n.index<i;index++)//依次循环到该输入的索引号位置
{
n=n.next;

}
return n.data;//将n的值返回
}//有一个for循环时间复杂度为O(n);根据表的长度变换

//向链表中加入元素

//单链表的添加是直接添加在链表的尾部
public  void inser(T t){
Node n=head;
whlie(n.next!=null){//依次遍历到该数组的最后一位;//有一个for循环时间复杂度为O(n);根据表的长度变换
n=n.next;//通过迭代循环变到尾部;
}
Node newNode=new Node( t,null);//创建新节点,将t的值加入,因为加到尾部所以next=null;
n.next=newNode;//将之前的最后一个元素指向添加后的最后一个元素;
N++//整个数组长度+1;
}

//向指定位置添加元素

public void inser(int i T t){
Node n=head;
for(int index=0;index<i-1;i++){//有一个for循环时间复杂度为O(n);根据表的长度变换
n=n.next;//将指针移动到最i的前一个元素,因为是index<i-1;
}
Node curr=n.next;//找出i位置上原来的值curr;
Node newNode=new Node(t,curr);//新建一个节点,将t传入其中,将curr作为新节点的下一个值使用;
n.next=newNode;将原来节点的下一个指向新节点,跳过原来的节点,完成
newNode.next=curr;//新插入的节点的下一个节点指向原来的节点;
N++;//元素增加+1;

//移除某个位置上的元素

public T remove(int i){
Node n=head;
for( int index=0;index<i-1;index++)//有一个for循环时间复杂度为O(n);根据表的长度变换
{
n=n.next;//将指针移动到最i的前一个元素,因为是index<i-1;
}
Node curr=n.next;//找出i位置上原来的值curr;
Node nextNode=curr.next;//删除的节点的下一个节点;
n.next=nextNode;//将要删除的节点的上一个节点指向要删除节点的下一个节点;
N--;
}

//输出一个值查询链表中是否存在该值,如果有返回该值的索引号

public int indexof(int i){
Node n=head;
while(n.next!=null){//将单链表内元素依次循环至尾部//有一个for循环时间复杂度为O(n);根据表的长度变换
n=n.next;
if(n.data.equals(t)){//判断遍历到的元素是否和输入的值相等;
return i;
}

}
return -1;
}

小结

在单链表的学习中,主要有头节点,且head.next=null;
在删除和向固定位置添加时,其原理是目标位置的前一个节点的next改变,和将目标节点的next改变,具体看是删除的话,将上一个节点指向目标节点的下一个节点,添加,直接指向添加节点,依次改变。最好使用whlie来循环到目标节点,这样并容易出现错误,还有要主要,head和head.next的使用。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值