「java链表销毁」java单链表的删除
今天给各位分享java链表销毁的知识,其中也会对java单链表的删除进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java单链表根据内容删除节点
- 2、java链表怎么删除第一个节点
- 3、java链表可以循环删除吗
- 4、java清空链表
- 5、java链表中删除一个节点的操作跟指向下一个节点的操作一样,那最后链表不就空了?
- 6、java 链表
java单链表根据内容删除节点
代码:
// 删除下标为index的节点
public void remove(int index) {
if (index = modCount) {
// 抛异常
System.out.println("indexOutOfBoundsException!");// 最好自定义异常抛出,这里演示
return;
}
Node node = head;
// 如果节点为第一个节点
if (index == 0) {
head = head.next; // 将头节点指向第二个节点
modCount--;
return;
}
// 如果节点为最后一个节点,找到最后一个节点的前一个节点,不用管
if (index == modCount - 1) {
System.out.println("ddd");
// 找到最后一个节点的前一个节点
int j = 0;
while (node != null j index - 1) {
// 最后一个节点的前一个节点
node = node.next;
j++;
}
last = node; // 最后一个节点设置为前一个节点
modCount--;
return;
}
// 如果节点为中间节点
int j = 0;
while (node != null j index - 1) {
// 查找被删除的节点的前一个节点
node = node.next;
j++;
}
node.next = node.next.next; // 被删除节点的下一个节点设置为被删除节点的下下个节点
modCount--;
}
java链表怎么删除第一个节点
单向链表还是双向的?
是不是就删除第一个?
那么可以这样
public
void
delete()
{
head
=
head.next();
}
如果想链尾的把链表做成双端链表就简单很多,如果是普通的就这样:
public
void
delete()
{
JNode
node
=
head;
JNode
node2
=
null;
while(node.next!=null)
{
node2
=
node;
node
=
node.next;
}
if(node==head){
head
=
null;
}
else
node2.next
=
null;
}
java链表可以循环删除吗
//LinkedList是我见过方法最多最多的集合了!
//删除方法,分老版本(空值抛异常),和新版本(空值给出null)
//遍历索引删除,迭代器删除!
//头删除,尾删除,反正所有集合中,它是我看过最多最多的的方法了!
//看几种全都是循环删除的吧!
import java.util.*;
public class LinkedListTest {
public static void main(String[] args) {
LinkedListString lk=new LinkedList();
add(lk);//添加!
see(lk);//查看!
//删除方法1:
while(lk.size()0) {
System.out.println("长度="+lk.size()+"\t删除:"+lk.poll());
}
see(lk);//查看!
add(lk);//添加!
see(lk);//查看!
//删除方法2:
while(lk.size()0) {
System.out.println("长度="+lk.size()+"\t删除:"+lk.pollFirst());
}
see(lk);//查看!
add(lk);//添加!
see(lk);//查看!
//删除方法3:
while(lk.size()0) {
System.out.println("长度="+lk.size()+"\t删除:"+lk.pollLast());
}
see(lk);//查看!
//删除方法4:
add(lk);//添加!
see(lk);//查看!
for(int i=0;ilk.size();) {
System.out.println("删除:"+lk.remove(i));
}
see(lk);//查看!
//删除方法5:
add(lk);//添加!
see(lk);//查看!
for(ListIteratorString it=lk.listIterator();it.hasNext();) {
System.out.println(lk.remove(it.nextIndex()));
}
see(lk);//查看!
}//添加!
private static void add(ListString lk) {
for(int i=0;i10;i++) {
lk.add("第"+(i+1)+"个元素:"+((char)(97+i)));
}
}//查看!
private static void see(ListString lk) {
System.out.println("链表长度="+lk.size());
System.out.println(lk);
System.out.println("--------------------------");
}
}
java清空链表
a.clear();//清空链表
//没办法清空内存,Java中的内存清空是Java垃圾回收器来。程序猿没法控制的。。。
java链表中删除一个节点的操作跟指向下一个节点的操作一样,那最后链表不就空了?
用已经封装好的ArrayList可以很方便的完成要求:
ListInteger list = ...// 操作的链表
for(int i=0; ilist.size; ){
int val = list.get(i);
if(val max){
list.remove(i);
}else{
i++;
}
}
java链表删除一个节点的原理是这样的,prev-curr-next,prev是当前节点curr的前一个节点,next是curr的下一个节点,删除curr就是让prev直接指向next即可,结果为prev-next,这样就行了,curr由于没有被引用,会被垃圾回收器回收。至于你说的链表空了,是从何而来?
java 链表
public class NodeT {
public T value;
public NodeT next;
public Node(T value, NodeT next) {
this.value = value;
this.next = next;
}
}
public class EverySecond {
public T NodeT everySecond(NodeT list) {
NodeT tmp = new NodeT(list.value, null);
if (list.next != null) {
tmp.next = everySecond(list.next);
}
return tmp;
}
}
public class EverySecondDriver {
public static void main(String[] args) {
// Build list
char[] values = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
NodeCharacter list = null;
for (int i = values.length - 1; i = 0; i--) {
list = new NodeCharacter(values[i], list);
}
// Print list
System.out.print("List:" + list);
for (NodeCharacter n = list; n != null; n = n.next) {
System.out.print(" " + n.value);
}
System.out.println();
// Get new list, with every second element
EverySecond es = new EverySecond();
NodeCharacter result = es.everySecond(list);
// Print result
System.out.print("Result:" + result);
for (NodeCharacter n = result; n != null; n = n.next) {
System.out.print(" " + n.value);
}
System.out.println();
}
}
java链表销毁的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java单链表的删除、java链表销毁的信息别忘了在本站进行查找喔。
发布于:2022-11-27,除非注明,否则均为
原创文章,转载请注明出处。