链表的基本操作java_单链表基本操作java实现

package com.data_structs;

class Link {

public E data;

public Link next;

public Link(E data) {

this.data = data;

}

}

class LinkList {

public Link first;

// 链表中数据项的个数

public int size;

public LinkList() {

first = null;

size = 0;

}

// 在表头插入新的数据

public void insertFirst(E value) {

Link link = new Link(value);

link.next = first;

first = link;

size++;

}

// 判断链表是否为空

public boolean isEmpty() {

return size == 0;

}

// 删除表头

public Link deleteFirst() {

Link temp = first;

first = first.next;

size--;

return temp;

}

// 删除链表中的数据(按序号)

public void deleDataByIndex(int index) {

if (index >= size || index < 0)

try {

throw new IndexOutOfBoundsException();

} catch (Exception ex) {

ex.printStackTrace();

}

Link curr = get(index); // 当前节点

if (index == 0) {

first = first.next;

size--;

return;

}

Link prev = get(index - 1); // 前一个节点

System.out.println("curr.next.data:" + curr.data);

prev.next = curr.next.next;

size--;

}

// 删除链表中的数值

public void deleteValue(E value) {

Link prev = null;

Link curr = null;

for (int i = 0; i < size; i++) {

// 找到了值

if (this.get(i).data == value) {

System.out.println("i: " + i);

// 删除的正好是第一个元素

if (i == 0) {

first = first.next;

size--;

} else {

prev = get(i - 1);

curr = get(i);

// 删除的是最后一个元素

if (i == size - 1) {

prev.next = null;

} else {

prev.next = curr.next;

}

size--;

}

}

}

}

// 输出链表中的所有数据

public void display() {

Link curr = first;

while (curr != null) {

System.out.print(curr.data + " ");

curr = curr.next;

}

System.out.println();

}

// 返回链表中数据项的个数

public int size() {

return size;

}

// 获取从头至尾的第i个数据项

public Link get(int i) {

if (i > size() - 1 || i < 0)

try {

throw new IndexOutOfBoundsException();

} catch (IndexOutOfBoundsException ex) {

ex.printStackTrace();

}

Link curr = first;

for (int n = 0; n < size(); n++) {

if (n == i)

return curr;

else

curr = curr.next;

}

return null;

}

// 输出从头至尾的第i个数据项

public void remove(int i) {

if (i == 0)

deleteFirst();

else if (i == size() - 1)

get(i - 1).next = null;

else {

get(i - 1).next = get(i + 1);

}

size--;

}

}

public class Link_list {

public static void main(String[] args) {

LinkList ll = new LinkList();

// 添加数据

ll.insertFirst((long) 10);

ll.insertFirst((long) 12);

ll.insertFirst((long) 1);

ll.insertFirst((long) 17);

ll.insertFirst((long) 12);

ll.insertFirst((long) 10);

ll.insertFirst((long) 18);

ll.insertFirst((long) 22);

ll.insertFirst((long) 34);

ll.insertFirst((long) 52);

ll.display();

System.out.println("获取数值:");

System.out.println(ll.get(1).data);

System.out.println("删除数值:(按序号)");

ll.deleDataByIndex(0);

System.out.println("删除数值:(按数值)");

ll.deleteValue((long) 17);

ll.display();

}

}

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2012-12-06 15:53

浏览 842

评论

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值