赞
踩
链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的。
可以把单链表类比为火车,火车的不同车厢之间,都是通过一个挂钩连接的,当这两个车厢脱钩后就没有任何关系了,不像我们的数组,相邻的两个元素不仅逻辑上连续,物理也连续。
假设咱们现在每节火车车厢只保存一个int值,这个值就是我们要存储的数据,每个车厢还要保存下一个车厢的地址。
单相链表:每个节点只保存了下一个节点的地址,只能从头节点开始向后遍历,这种链表结构称为单向链表,简称单链表。
节点类如何定义?->每节火车车厢
class Node{ int val; //存放节点的值 Node next; //存放下一节点的地址 public Node(){ }; public Node(int val){ this.val = val; } public Node(int val,Node next){ this.val = val; this.next = next; } }
链表有很多种类,我们先介绍单链表,
给你一个火车头,Node head;就可以遍历当前链表中所有的节点,从head开始向后遍历。
public class SingleLineList {
//链表的头结点
private Node head = null;
//当前链表中Node节点的个数 = 有效值的个数
private int size = 0;
这样我们就创建好了一个基本的链表结构。
我们先重写一下toString方法,遍历链表,实现链表的打印操作。
//toString方法
public String toString(){
String ret = "";
for(Node x = dummyHead.next;x!=null;x=x.next){
ret += x.val;
ret += "->";
}
ret += "NULL";
return ret;
}
那么我们下面就开始创建链表
public void addFirst(int val){ Node newNode = new Node(); //保存值 newNode.val = val; if (head == null){ //newNode就是第一个节点 head =newNode; } else { //当前火车不为空 newNode.next = head; head = newNode; } size ++; }
想要在index位置插入新节点,因为单链表只可以从后向前遍历,我们只需要找到要插入节点的前驱结点。我们可以让prev引用从头结点开始走index-1步,这样就找到了待插入结点的前驱结点
public void add(int index,int val){ //1.若index位置非法的 if(index<0||index>size){ System.out.println("add index error"); return; } if (index==0){ addFirst(val); } else { //3.当前索引合法且不是在数组的头部插入,就要找到插入位置的钱去 Node newNode = new Node(); newNode.val = val; Node prev = head; for (int i =0;i<index;i++){ prev = prev
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。