Java是如何构造出链表的
理解链表是什么
链表是由一系列结点构成的数据结构,每个结点包含该结点的数据和zhi指向下一个结点的指针
如图为链表存储 {4,,15,,7,,40},各个元素在内存中的存储状态
再想想java是怎么实现链表的
先创建一个节点类,包含节点的值和指向下一个结点的指针。
如
class Course{
int val;
Course next;
}
jvm中,在栈区中记录了堆内存的地址,并根据地址找到下一个节点,形成链表
、
一个简单的实现链表
Class ListNode{
int val;
ListNode next;
ListNode(int x){
val = x;
next = null;
}
}
public static void main(String[] args){
ListNode listnode = new ListNode(1);
}
链表增加元素,首部、中间和尾部分别会有什么问题,该如何处理?
首部增加
在首部增加元素时,要注意不要忘记head
即每次new Node时执行Node.next=head
中部增加
需要先将新节点指向目标节点,再将目标节点的前一个节点指向新节点
尾部增加
只需要将尾部的节点指向新的节点
简单实现链表插入
链表删除元素,首部、中间和尾部分别会有什么问题,该如何处理?
首部删除
在首部删除元素时,将head指向head的下一个节点
即head=head.next;
中部删除
首先需要判断目标节点是否指向目标节点的下一个节点,再将该节点指向下下一个节点
cur.next = cur.next.next;
尾部删除
首先需要找到指向目标节点的节点的,再将该节点指向null
双向链表是如何构造的,如何实现元素的插入和删除。
双向链表里每个节点有两个指针分别指向前一个结点和后一个结点
简单实现一个双向链表
Class DoublyListNode {l
public int val;
public ListNode next;
public ListNode pre;
DoublyListNode(int x) {
val = x;
next = null;
pre = null;
}
DoublyListNode doublynode = new DoublyListNode(1)
}
双链表相对于单链表多了一个前驱节点,所以在做增改内容时要多一句调整前驱的语句
//增加
nodeInsert.next=pNode.next;
nodeInsert.prev=pNode;
pNode.next=nodeInsert;
//删除
cur.prev.next=cur.next;
cur.next.prev=cur.prev;