链表的概念
在链表中 ,每个点都由值和指向下一个结点的地址组成的独立的单元,称为一个结点。
对于单链表,如果知道了第一个元素,就可以通过遍历访问整个链表,因此第一个结点最重要,一般称为头结点(head)。
创建链表
class Node {
public int val; //当前结点存放的数据
public Node next; //指向的下一个节点
Node(int x) {
val = x;
next = null;
}
}
链表的操作
表遍历
public static void printLinkedList(Node list){
Node node = list ; //记录头结点的位置
while (node!=null){ //从头结点开始遍历
System.out.println(node.val); //打印结点的value值
node = node.next; //指向下一个结点
}
}
表插入
public static Node insertNode(Node head, Node nodeInsert, int position) {
// 需要判空,否则后面可能会有空指针异常
if (head == null) {
return nodeInsert;
}
//越界判断
int size = getLength(head);
if (position > size + 1 || position < 1) {
System.out.println("位置参数越界");
return head;
}
//在链表开头插入
if (position == 1) {
nodeInsert.next = head;
head = nodeInsert;
return head;
}
Node pNode = head;
int count = 1;
while (count < position - 1) {
pNode = pNode.next;
count++;
}
nodeInsert.next = pNode.next;
pNode.next = nodeInsert;
return head;
}
表删除
public static Node deleteNode(Node head, int position) {
if (head == null) {
return null;
}
int size = getLength(head);
//思考一下,这里为什么是size,而不是size+1
if (position > size || position <1) {
System.out.println("输入的参数有误");
return head;
}
if (position == 1) {
//curNode就是链表的新head
return head.next;
} else {
Node cur = head;
int count = 1;
while (count < position - 1) {
cur = cur.next;
count++;
}
Node curNode = cur.next;
cur.next = curNode.next;
}
return head;
}