
正文
单向链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--;
}
相关问答
Q1: java 什么是单向链表 和 双向链表 ?
链表是类似一种数据结构的东西,就是分别存放有地址以及数据单项链表一般是上一个存放地址的地方存放下一个节点的地址,而双向的就是有两个存放地址的地方,分别存上一个以及下一个的地址。大概是这样子
Q2: Java中单向链表怎么将节点插入到指定位置?
你可能对链表单向链java代码的数据结构并不是很清楚 给你个写示例代码理解下单向链java代码,最好打个断点每一步跟踪理解一下
//class ListNode {
// int val;
// jdb.ListNode next;
// ListNode(int x) { val = x; }
//}
public class Main {
public static void main(String[] args) throws Exception {
//现在有一个链表1-2-3
ListNode listNode = new ListNode(1);
listNode.next = new ListNode(2);
listNode.next.next = new ListNode(3);
listNode.next.next.next = new ListNode(4);
//我们来打印一下
printListNode(listNode);
//我现在要在2后面插入9
boolean flag = insertVal(listNode, 3, 9);
System.out.println("是否插入成功:"+flag);
//再来打印一下
printListNode(listNode);
}
/**
*
* @param listNode//原链表
* @param pre//插入前的位置
* @param val//插入的值
*/
public static boolean insertVal(ListNode listNode,Integer pre, Integer val) {
boolean rs = false;
//找插入前的位置
while (listNode != null listNode.val != pre) {
listNode = listNode.next;
}
if (listNode != null listNode.val==pre) {
//找到啦
//先把原链表后的数据保存起来 这边就是3-4
ListNode temp = listNode.next;
//把要插入的值连上单向链java代码,再把原来保存的值连上
listNode.next = new ListNode(val);
listNode.next.next = temp;
//上面代码中 listNode的值是2,listNode.next的值是9,listNode.next.next的值就是刚才保存的临时链表3-4
//插入成功标记一下哦
rs=true;
}
return rs;
}
/**
* 打印呀
* @param listNode
*/
public static void printListNode(ListNode listNode) {
if (listNode != null) {
ListNode temp = listNode;
while (temp != null) {
System.out.println(temp.val);
temp = temp.next;
}
}
System.out.println("-------------");
}
}
Q3: java单向链表
java.util.Linkedlist是双向链表单向链java代码,当然也就包括了单链表的功能单向链java代码,你可以去看他怎么写的啊
public class SingleLinkedListE {
private EntryE first, last;
private int size = 0;
public void add(E element) {
EntryE newEntry = new EntryE(element, null);
if (first == null) {
first = last = newEntry;
} else {
last.next = newEntry;
last = newEntry;
}
++size;
}
public E get(int index) {
if (index 0 || index = size)
throw new IndexOutOfBoundsException("Index: "+index+
", Size: "+size);
EntryE e = first;
for (int i = 0; i index; ++i)
e = e.next;
return e.data;
}
private static class EntryE {
Entry(E data, EntryE next) {
this.data = data;
this.next = next;
}
E data;
EntryE next;
}
}
Q4: 编写程序,建立一个带有节点的单向链表,输入字符串,并按从小到大顺序组织到链表中
int main()
{
Link head; //链表(不带头节点)
int n;
printf("输入链表的长度n: ");
scanf("%d",n);
printf("连续输入%d个数据(以空格隔开): ",n);
head=CreateLink(n);
printf("\n原本链表的节点是: ");
DispLink(head);
LinkSort(head);
printf("\n从大到小排序之后: ");
DispLink(head);
printf("\n");
return 0;
}
链表的具体存储表示为:
① 用一组任意的存储单元来存放线性表的结点(这组存储单元既可以是连续的,也可以是不连续的)
② 链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息(称为指针(pointer)或链(link))
链式存储是最常用的存储方式之一,它不仅可用来表示线性表,而且可用来表示各种非线性的数据结构。
以上内容参考:百度百科-单链表
关于单向链java代码和单向链表结构图的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






