Java中的数据结构(2)----链表

本文介绍了一个使用Java实现的单链表数据结构,包括节点定义、基本操作如插入、删除等,并提供了两种计算链表长度的方法及遍历打印功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

单链表:

Java代码  收藏代码
  1. package com.wz.util;  
  2.   
  3. class Node<T> {  
  4.     public T t;  
  5.     public Node<T> next;  
  6.   
  7.     Node(T t) {  
  8.         this.t = t;  
  9.     }  
  10.   
  11.     public String toString() {  
  12.         return t.toString();  
  13.     }  
  14. }  
  15.   
  16. public class SingleList<T> {  
  17.     private Node<T> head;  
  18.     private int size;  
  19.   
  20.     SingleList() {  
  21.         size = 0;  
  22.         head = new Node<T>(null); // 表头不放数据  
  23.         head.next = null;  
  24.     }  
  25.   
  26.     // 插入到链表的前端(表头之后)  
  27.     public void insertHead(Node<T> n) {  
  28.         n.next = head.next;  
  29.         head.next = n;  
  30.         size++;  
  31.     }  
  32.   
  33.     // 插入到链表的尾部(默认添加方式)  
  34.     public void insert(Node<T> n) {  
  35.         n.next = null;  
  36.         Node<T> current = head.next;  
  37.         while (current.next != null)  
  38.             current = current.next;  
  39.         current.next = n;  
  40.         size++;  
  41.     }  
  42.   
  43.     // 在指定节点后添加节点  
  44.     public void insertTo(Node<T> n1, Node<T> n2) {  
  45.         n2.next = n1.next;  
  46.         n1.next = n2;  
  47.         size++;  
  48.     }  
  49.   
  50.     // 删除链表前端节点  
  51.     public void delHead() {  
  52.         Node<T> current = new Node<T>(null);  
  53.         current = head.next;  
  54.         head.next = current.next;  
  55.         current = null;  
  56.         size--;  
  57.     }  
  58.   
  59.     // 删除尾节点  
  60.     public void delTail() {  
  61.         Node<T> current = head.next;  
  62.         Node<T> prev = null;  
  63.         while (current.next != null) {  
  64.             prev = current;  
  65.             current = current.next;  
  66.         }  
  67.         prev.next = null;  
  68.         current = null;  
  69.         size--;  
  70.     }  
  71.   
  72.     // 删除指定节点  
  73.     public void del(Node<T> n) {  
  74.         Node<T> current = head.next;  
  75.         Node<T> prev = null;  
  76.         if ((n != null) && (current == n))  
  77.             delHead();  
  78.         else {  
  79.             while ((current != n) && (current != null)) {  
  80.                 prev = current;  
  81.                 current = current.next;  
  82.             }  
  83.             prev.next = current.next;  
  84.             current = null;  
  85.             size--;  
  86.         }  
  87.     }  
  88.     // 链表长度  
  89.     public int getSize() {  
  90.         return size;  
  91.     }  
  92.     // 另外一种计算链表长度的方法  
  93.     public int length(){  
  94.         int leng = 0;  
  95.         Node<T> current = head.next;  
  96.         while(current != null){  
  97.             leng++;  
  98.             current = current.next;  
  99.         }  
  100.         return leng;  
  101.     }  
  102.   
  103.     // 遍历链表并打印  
  104.     public void diplay() {  
  105.         Node<T> current = head.next;  
  106.         while (current != null) {  
  107.             System.out.println(current.toString());  
  108.             current = current.next;  
  109.         }  
  110.     }  
  111. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值