public class LinkedList <E>{
private class Node {
public E e;
public Node next;
public Node(E e,Node next){
this.e = e;
this.next =next;
}
public Node(E e){
this(e,null);
}
public Node(){
this(null,null);
}
@Override
public String toString(){
return e.toString();
}
}
private Node dummyhead;
private int size;
public LinkedList(){
dummyhead= new Node(null,null);
size=0;
}
//获取链表中元素的个数
public int getSize(){
return size;
}
//返回链表是否为空
public boolean isEmpty(){
return size==0;
}
// 在链表第index(0~based)位置添加新的元素e
// 在链表中不是一个常用操作,练习用
public void add(int index,E e){
if(index<0||index>size)
throw new IllegalArgumentException("Add failed,Illegal index.");
Node prev = dummyhead;
for (int i = 0;i<index;i++)
prev= prev.next;
// Node node = new Node(e);
// node.next= prev.next;
// prev.next=node;
prev.next=new Node(e,prev.next);
size++;
}
//在链表头添加新的元素e
public void addFirst( E e){
// Node node= new Node(e);
// node.next=head;
// head=node;
add(0,e);
}
// 在链表末尾添加新的元素e
public void addLast(E e){
add(size,e);
}
// 获得链表的第index(0~based)个位置的元素
// 在链表中不是一个常用的操作练习用
public E get(int index){
if(index<0||index>=size)
throw new IllegalArgumentException("Get failed,Illegal index.");
Node cur=dummyhead.next;
for (int i =0;i<index;i++)
cur= cur.next;
return cur.e;
}
// 获得链表的第一个元素
public E getFirst(){
return get(0);
}
// 获取链表中最后一个元素
public E getLast(){
return get(size-1);
}
// 修改链表的第index个位置的元素e
// 在链表中不是一个常用操作,练习
public void set(int index,E e){
if(index<0||index>=size)
throw new IllegalArgumentException("set failed,Illegal index.");
Node cur = dummyhead.next;
for (int i =0;i<index;i++)
cur=cur.next;
cur.e=e;
}
// 查找链表中是否有元素e
public boolean contains(E e){
Node cur=dummyhead;
while (cur!=null){
if (cur.e.equals(e))
return true;
cur =cur.next;
}
return false;
}
// 从链表中删除第index(0~based)个位置的元素,返回删除元素
// 在链表中不是一个常用的操作练习用
public E remove(int index){
if(index<0||index>=size)
throw new IllegalArgumentException("set failed,Illegal index.");
Node prev= dummyhead;
for (int i = 0;i<index;i ++)
prev =prev.next;
Node retNode = prev.next;
prev.next= retNode.next;
retNode.next=null;
size--;
return retNode.e;
}
// 从链表中删除第一个元素,返回删除的元素
public E removeFirst(){
return remove(0);
}
// 从链表中删除最后一个元素,返回删除的元素
public E removeLast(){
return remove(size-1);
}
@Override
public String toString(){
StringBuilder res =new StringBuilder();
// Node cur=dummyhead.next;
// while (cur!=null){
// res.append(cur+"->");
// cur=cur.next;
// }
for (Node cur=dummyhead.next ; cur!=null ; cur=cur.next)
res.append(cur+"->");
res.append("NULL");
return res.toString();
}
}
LinkedList.zip
需积分: 0 195 浏览量
2023-09-26
08:07:46
上传
评论
收藏 9KB ZIP 举报
Dreamboat337
- 粉丝: 0
- 资源: 1
最新资源
- 编译原理:正规式转NFA(有穷自动机)
- 通过 Navicat 备份文件读取连接信息和解析密码
- Linux下开箱即用的C++单元测试demo示例,public成员函数单元测试
- 连接Redis服务器 在使用Redis之前,首先需要使用redis-cli工具连接到Redis服务器 redis-cli是Re
- 连接Redis服务器 在使用Redis之前,首先需要使用redis-cli工具连接到Redis服务器 redis-cli是Red
- 连接Redis服务器 在使用Redis之前,首先需要使用redis-cli工具连接到Redis服务器 redis-cli是Red
- redis命令实践 详细教程
- redis命令实践 详细教程
- redis命令实践 详细教程
- redis命令实践 详细教程
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈