java简单单向链表_用Java实现单向链表

分享一个自己用Java实现的单向链表

链表的简单介绍

链表是一种在物理上非连续的存储结构。在单向链表中,每一个节点都是一个对象,其中包含了数据和引用两部分,通过引用指向下一个节点。这种结构相比线性存储结构要复杂,并且由于增加了指针(引用)域导致内存开销更大,但它不像数组那样需要预先知道数据规模,可以充分利用计算机的内存空间。

链表与数组的优缺点对比:

数组的优点:

支持随机访问

查找速度快

数组的缺点:

插入和删除操作效率低

需要预先知道数据规模,并要求存储空间连续

可能浪费存储空间

链表的优点:

插入删除速度快

不需要预先知道数据规模

内存利用率高

长度可变,不需要存储空间连续

链表的缺点:

不支持随机访问,需要从第一个节点开始遍历

下面给出节点的数据结构

b60818385721

LinkNode.png

// 节点的数据结构

public class LinkNode {

public char data;

LinkNode next;

LinkNode(char data){

this.data = data;

}

}

代码实现

public class LinkList {

//头结点

public LinkNode head = null;

//尾插法插入节点

public void AddNode(char data){

LinkNode p = new LinkNode(data);

if(head == null){

head = p;

}

else{

LinkNode t = head;

while(t.next != null){

t = t.next;

}

t.next = p;

}

}

//根据索引删除节点

public void DelNode(int index){

if(index < 0 || index >= Length()){

System.out.println("out of memory");

return;

}

else if(index == 0){

head = head.next;

}

else{

int c = 0;

LinkNode p = head;

LinkNode t = head;

while(c++ < index){

t = p;

p = p.next;

}

t.next = p.next;

}

}

//链表反转

public void ListReverse(){

LinkNode pre = null;

LinkNode next = null;

while(head != null){

next = head.next;

head.next = pre;

pre = head;

head = next;

}

head = pre;

}

//删除链表中的重复元素

public void DelDuplecated(){

LinkNode p = head;

while(p != null){

LinkNode q = p;

while(q.next != null){

if(p.data == q.next.data){

q.next = q.next.next;

}

else{

q = q.next;

}

}

p = p.next;

}

}

//获得链表长度

public int Length(){

int len = 0;

LinkNode p = head;

while(p != null){

len++;

p = p.next;

}

return len;

}

//打印链表

public void PrintList(){

LinkNode p = head;

while(p != null){

System.out.println(p.data);

p = p.next;

}

System.out.println();

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值