数据结构与算法java实战篇--链表

目录

        一.链结点

        二.单链表

        1.单链表的插入方法insertFirst()

        2.单链表的删除方法deleteFirst()

        3.链表显示displayList()

        4.单链表代码:

三. 查找和删除指定链结点

 四.双端链表 

五.用链表实现的栈

六.用链表实现队列 

七.有序链表

八.双向链表

        1.遍历 

        2.插入

        3.删除


一.链结点

        在链表中,每一个数据项都包含在链结点中,一个链结点是某个类的对象,这个类叫Link,因为一个类有许多类似的结点,所有有必要用一个不同于链表的类来表达链结点,每个Link对象都包含一个对下一个链结点引用的字段next,但是链表本身的对象中一个字段指向对第一个链结点的引用

链结点 Link的定义:

class Link{
public int iData;
public double dData;
public Link next;
}

二.单链表

单链表的操作:

·在链表头插入一个数据项

·在链表头删除一个数据项

·遍历链表显示它的内容

1.单链表的插入方法insertFirst()

链表插入:

定义一个新的链表结点,让新结点连接旧结点,再让头结点连接新结点

插入insertFirst()代码:

public void insertFirst(int id,double dd){
Link newLink=new Link(id,dd);
newLink.next=first;
first=newLink;
}

2.单链表的删除方法deleteFirst()

链表删除:

通过把first重新指向第二个链结点,断开和第一个链结点的连接

deleteFirst():

public Link deleteFirst(){
Link temp=first;
first=first.next;
return temp;
}

3.链表显示displayList()

代码:

public void displayList(){
System.out.print("List(fist—>last):");
Link current=first;
while(current!=null){
current.displayLink();
current=current.next;
}
System.out.print("");
}

4.单链表代码:

class Link{   //定义链表
    public int iData;
    public double dData;
    public Link next;
    public void displayLink(){
        System.out.print("{"+iData+","+dData+"}");
    }
    public Link(int id,double dd){
        iData=id;
        dData=dd;
    }
}

class LinkList{   //定义单链表
    private Link first;
    public LinkList(){
        first=null;
    }
    public boolean isEmpty(){   //链表是否为空
        return (first==null);
    }
    public void insertFirst(int id,double dd){    //单链表插入操作
        Link newLink=new Link(id,dd);
        newLink.next=first;
        first=newLink;
    }
    public Link delectFirst(){   //删除操作
        Link temp=first;
        first=first.next;
        return temp;
    }
    public void displayList(){   //显示单链表
        System.out.println("List(first—>last):");
        Link current=first;
        while (current!=null){
            current.displayLink();
            current=current.next;
        System.out.println(" ");
        }
    }
}

三. 查找和删除指定链结点

        查找的实现:通过一个current变量开始时指向first,然后通过不断地把自己赋值为current.next,沿着链表向前移动,如果要查找的值和链表的值相同,就返回链表结点的引用,如果没有找到就返回null

        删除操作的实现:删除操作先寻找到要删除的结点,然后将前一个结点和后一个结点连接,实现删除操作

代码:

public class CollectionDemo {
    public static void main(String[] args) {
        LinkList linkList = new LinkList();
       linkList.insertFirst(1,12);
       linkList.insertFirst(2,23);
       linkList.insertFirst(3,34);
        linkList.displayList();
        Link j=linkList.find(2);
        System.out.println("第二个元素为:"+j.dData);
        Link d=linkList.delect(1);
        System.out.println("删除第一个元素后:");
        linkList.displayList();
    }
}

class Link {  //链表结点
    public int iData;
    public double dData;
    public Link next;  //链表结点初始化

    public Link(int id, double dd) {
        this.dData = dd;
        this.iData = id;
    }
    //显示数据
    public void displayLink() {
        System.out.print("{" + iData + "," + dData + "}");
    }
}
//链表定义
class LinkList{
    private Link first;
    public LinkList(){
        first=null;
    }

    //插入操作
    public void insertFirst(int id,double dd){
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前段被迫创业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值