如何实现java链表中的基本操作(增、删、查、改)
链表也是一个线性的数据结构,与数组不同的是,链表在内存中的存储方式是随机存储。
下面给出涵盖链表四个操作的一个完整的例子,有几点需要注意的是:
(一)在增删改查之前,都需要对给出的下标进行边界判断;
(二)增加一个名为last的节点,可以方便在链表的尾部进行操作,省去了查找到最后一个节点的时间复杂度;
(三)在链表的内部插入元素时,我们先找到要插入位置的前一个节点prevNode,然后可以记录下prevNode的next,插入时先将prevNode的next指向要插入的节点,再将要插入的节点的next指向当前的next。这一点和C++中的操作也略有不同;
(四)删除节点时,用removedNode来记录删除节点的返回值,并且不要忘了size要减1。
相关免费视频教程推荐:java视频
操作示例如下:
publicclassMyLinkedList {
//定义一个静态的内部类
privatestaticclassNode{
int data;
Node next;
Node(int data){
this.data = data;
}
}
privateNode head;
privateNode last;//为了方便尾部插入元素的操作
privateint size;//size表示链表的实际长度
publicvoid insert(int data, int index)throws Exception{
if(index < 0 || index > size)
thrownewIndexOutOfBoundsException("超出链表节点范围!");
Node insertedNode = newNode(data);
if(size == 0){//插入第一个元素时元素个数为0
head = insertedNode;
last = insertedNode;
}elseif(size == index){//在链表的末尾插入
last.next = insertedNode;
last = insertedNode;
}else{
Node prevNode = get(index - 1);
Node nextNode = prevNode.next;
prevNode.next = insertedNode;
insertedNode.next = nextNode;
}
size++;
}
publicvoid update(int data, int index) throws Exception{
if(index < 0 || index >= size)
thrownewIndexOutOfBoundsException("超出链表节点范围!");
if(index == 0)
head.data = data;
elseif(index == size - 1)
last.data = data;
else{
Node temp = get(index);
temp.data = data;
}
}
publicNode remove(int index) throws Exception {
if(index < 0 || index >= size){
thrownewIndexOutOfBoundsException("超出链表节点范围!");
}
Node removedNode = null;//不给removedNode分配堆内存
if(index == 0){
removedNode = head;
head = head.next;
}
elseif(index == size - 1){
//删除尾结点
Node prevNode = get(index - 1);
removedNode = prevNode.next;
prevNode.next = null;
last = prevNode;
}
else{
Node prevNode = get(index - 1);
Node nextNode = prevNode.next.next;
removedNode = prevNode.next;
prevNode.next = nextNode;
}
size--;
returnremovedNode;
}
//查找链表元素
publicNode get(int index) throws Exception{
if(index < 0 || index >= size){
thrownewIndexOutOfBoundsException("超出链表节点范围!");
}
Node temp = head;
for(int i = 0; i < index; i++){
temp = temp.next;
}
// size--;
returntemp;
}
//输出链表
publicvoid output(){
Node temp = head;
while(temp != null){
System.out.println(temp.data);
temp = temp.next;
}
}
publicstaticvoid main(String[] args) throws Exception{
MyLinkedList myLinkedList = newMyLinkedList();
myLinkedList.insert(3,0);
myLinkedList.insert(7,1);
myLinkedList.insert(9,2);
myLinkedList.insert(5,3);
myLinkedList.insert(6,1);
myLinkedList.remove(0);
myLinkedList.update(2,1);
myLinkedList.output();
System.out.println(myLinkedList.size);
}
}
想了解更多相关教程可以访问:java开发入门
网友评论