如何从 iPhone 转移到 itel:4 种简单快捷的方法
2026/7/24 0:02:19
继上篇明确了动态数组具备动态扩容,取值快等优势,但存在添加删除数据速度较慢等缺陷,链表的数据结构恰好弥补了这一短板。
链表是不连续的线性存储结构,依靠每个节点内部的引用(指针),将零散的节点串联起来。
上一个节点的指针域存档着下一个节点的地址
example
自定义动态数组 LinkList 完整实现代码
packagecom.yw.oop0719;/** * @author YAN * @date 2026/7/19 19:45 * @description *///关于链表publicclassLinkList{//链表的头节点privateNodehead;//链表的第一个节点privateintsize=0;//在末尾添加数据publicvoidadd(intdata){//创建节点保存数据,把新节点接入链表尾部Nodenode=newNode(data);//判断链表是否存在if(head==null){//node就保存为头节点head=node;//size++;}else{//链表存在数据//遍历到尾节点:尾节点next为null//定义变量来记录当前节点位置Nodecurr=head;while(curr.next!=null){//不是尾节点//curr标记后移curr=curr.next;//curr为空就表示尾节点curr.next=node;}size++;}}//删除指定下标节点publicintremove(intindex){Nodecurr=head;intdeledata;//情况1:删除头节点(index = 0)if(index==0){deledata=head.data;head=head.next;}else{//情况2:删除中间、尾部节点,先找到前驱节点(index-1的位置)for(inti=0;i<index-1;i++){curr=curr.next;}//curr是前驱节点,curr.next是待删除节点NodedeleNode=curr.next;deledata=deleNode.data;//跳过待删除节点完成删除curr.next=deleNode.next;}size--;returndeledata;}//获取指定下标数据publicintget(intindex){//判断index是否合法//if (index > 0 && index <= size) {//遍历到index 位置Nodecurr=head;for(inti=0;i<index;i++){curr=curr.next;}returncurr.data;}//}//长度publicintsize(){returnsize;}publicstaticvoidmain(String[]args){LinkListlink=newLinkList();link.add(1);link.add(2);link.add(3);for(inti=0;i<link.size();i++){System.out.println(link.get(i));}}}//定义链表的节点类classNode{publicintdata;//保存数据publicNodenext;//保存链表的下一个节点publicNode(intdata){this.data=data;}publicNode(){}}