> 文档中心 > 单链表的实现

单链表的实现

目录:

      • 定义结点元素:
      • 尾插法:
      • 尾删法:
      • 显示链表数据:
      • 完整程序:
      • 输出结果:

定义结点元素:

class Node{    public int id ;     //结点编号    public int val;     //结点数据    public Node Next;   //指向下一节点//构造器    public Node(int val,int id) { this.val = val; this.id = id;    }    @Override    public String toString() { return "Node{"+  " id=" + id +  "    val=" + val +  '}';    }}

尾插法:

//添加结点(尾插)---形参表示要添加的结点    public void add_tail(Node tmp){ //辅助指针 Node node = head; //遍历链表 找到尾结点 while(node.Next != null){     node = node.Next; } node.Next = tmp;//尾结点指向新添加的结点 length ++;//添加成功,链表长度加 1    }

尾删法:

 //删除结点(尾删)    public void del_tail(){ Node delete = head.Next;    //保存删除结点位置 Node node = head;    //保存删除结点的前一个位置 //判断链表是否为空,若为空直接退出 if(delete == null){     System.out.println("链表为空,无法删除");     return; } //遍历链表 找到尾结点(即删除的结点) while(delete.Next != null){     delete = delete.Next;     node = node.Next; } System.out.println("删除结点数据为:    "+ delete);//输出删除结点的元素(会调用该结点的tostring 方法) node.Next = null;//将删除结点的指向赋值为空 length --;//删除成功,链表长度减 1    }

显示链表数据:

public void show(){ //判断链表是否为空 if(head.Next == null){     System.out.println("链表为空");     return; } Node node = head.Next; while(node != null){     System.out.println("结点数据为:    "+ node);     node = node.Next; }    }

完整程序:

class SingleList{    public int length = 0 ;  //链表长度    //初始化头结点     private Node head = new Node(0,0);    //添加结点(尾插)    public void add_tail(Node tmp){ //辅助指针 Node node = head; //遍历链表 找到尾结点 while(node.Next != null){     node = node.Next; } node.Next = tmp; length ++;    }    //删除结点(尾删)    public void del_tail(){ Node delete = head.Next;    //保存删除结点位置 Node node = head;    //保存删除结点的前一个位置 if(delete == null){     System.out.println("链表为空,无法删除");     return; } //遍历链表 找到尾结点(即删除的结点) while(delete.Next != null){     delete = delete.Next;     node = node.Next; } System.out.println("删除结点数据为:    "+ delete); node.Next = null; length --;    }    public void show(){ //判断链表是否为空 if(head.Next == null){     System.out.println("链表为空");     return; } Node node = head.Next; while(node != null){     System.out.println("结点数据为:    "+ node);     node = node.Next; }    }}
public class 单链表 {    public static void main(String[] args) { Node node1 = new Node(5,1); Node node2 = new Node(6,2); Node node3 = new Node(7,3); SingleList singleList = new SingleList(); singleList.add_tail(node1); singleList.add_tail(node2); singleList.add_tail(node3); singleList.show(); System.out.println("链表长度为:    "+ singleList.length); singleList.del_tail(); singleList.del_tail(); singleList.show(); System.out.println("链表长度为:    "+ singleList.length);    }}class SingleList{    public int length = 0 ;  //链表长度    //初始化头结点    private Node head = new Node(0,0);    //添加结点(尾插)    public void add_tail(Node tmp){ //辅助指针 Node node = head; //遍历链表 找到尾结点 while(node.Next != null){     node = node.Next; } node.Next = tmp; length ++;    }    //删除结点(尾删)    public void del_tail(){ Node delete = head.Next;    //保存删除结点位置 Node node = head;    //保存删除结点的前一个位置 if(delete == null){     System.out.println("链表为空,无法删除");     return; } //遍历链表 找到尾结点(即删除的结点) while(delete.Next != null){     delete = delete.Next;     node = node.Next; } System.out.println("删除结点数据为:    "+ delete); node.Next = null; length --;    }    public void show(){ //判断链表是否为空 if(head.Next == null){     System.out.println("链表为空");     return; } Node node = head.Next; while(node != null){     System.out.println("结点数据为:    "+ node);     node = node.Next; }    }}class Node{    public int id ;     //结点编号    public int val;     //保存结点数据    public Node Next;   //指向下一节点    public Node(int val,int id) { this.val = val; this.id = id;    }    @Override    public String toString() { return "Node{"+  " id=" + id +  "    val=" + val +  '}';    }}

输出结果:

在这里插入图片描述
说明:此文章为学习笔记,如有侵权请联系删除。

儿童百科