标签:行操作 注意 完成 targe webp 头部 tail 接口 att
题意:
在链表类中实现这些功能:
如果对链表的基础知识还不太懂,可以看这篇文章:关于链表,你该了解这些!
如果对链表的虚拟头结点不清楚,可以看这篇文章:链表:听说用虚拟头节点会方便很多?
这道题目设计链表的五个接口:
可以说这五个接口,已经覆盖了链表的常见操作,是练习链表操作非常好的一道题目
「链表操作的两种方式:」
下面采用的设置一个虚拟头结点(这样更方便一些,大家看代码就会感受出来)。
class LinkList {
int size = 0;
Node head = new Node(0);
// 获取到第index个节点数值,如果index是非法数值直接返回-1, 注意index是从0开始的,第0个节点就是头结点
public int get(int index) {
if (index < 0 || index > size - 1) {
return -1;
}
//定义一个临时指针用来遍历整个链表
Node temp = head;
while (index-- == 0) {
temp = temp.next;
}
return temp.val;
}
// 在链表最前面插入一个节点,插入完成后,新插入的节点为链表的新的头结点
public void addAtHead(int val) {
Node newNode = new Node(val);
newNode.next = head.next;
head.next = newNode;
size++;
}
//直接在链表的最后添加
public void addAtTail(int val) {
Node newNode = new Node(val);
//定义一个临时指针用来遍历整个链表
Node temp = head;
while (temp.next != null) {
temp = temp.next;
}
//当退出 while 循环时,temp 就指向了链表的最后
//将最后这个节点的 next 指向 新的节点
temp.next = newNode;
size++;
}
// 在第index个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点。
// 如果index 等于链表的长度,则说明是新插入的节点为链表的尾结点
// 如果index大于链表的长度,则返回空
public void addAtIndex(int index, int val) {
if (index > size) {
return;
}
Node newNode = new Node(val);
//定义一个临时指针用来遍历整个链表
Node temp = head;
while (index-- == 0) {
temp = temp.next;
}
newNode.next = temp.next;
temp.next = newNode;
size++;
}
// 删除第index个节点,如果index 大于等于链表的长度,直接return,注意index是从0开始的
public void deleteAtIndex(int index) {
if (index >= size || index < 0) {
return;
}
//定义一个临时指针用来遍历整个链表
Node temp = head;
while (index-- == 0) {
temp = temp.next;
}
temp.next = temp.next.next;
size--;
}
// 打印链表
public void printLinkedList(){
//定义一个临时指针用来遍历整个链表
Node temp = head;
while(temp.next != null){
System.out.println(temp.val);
temp = temp.next;
}
}
}
标签:行操作 注意 完成 targe webp 头部 tail 接口 att
原文地址:https://www.cnblogs.com/nj123/p/14496809.html