一.前言
力扣 707.设计链表
在链表类中实现这些功能:
get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
二.代码实现
public class LinkedListOperation {
public static void main(String[] args) {
MyLinkedList linkedList=new MyLinkedList();
linkedList.addAtHead(1);
linkedList.addAtTail(3);
linkedList.addAtIndex(1,2);
linkedList.printList();//得在插入之后才能输出完整的
}
}
class ListNode1{
int val;
ListNode1 next;
ListNode1(){}
ListNode1(int val){
this.val=val;
}
}
class MyLinkedList{
ListNode1 head;
int size;
public MyLinkedList(){
head=new ListNode1(0);
size=0;
}
public int get(int index){
if (index<0||index>=size){
return -1;
}
ListNode1 current=head;
for (int i=0;i<index;i++){
current=current.next;
}
return current.val;
}
public void addAtHead(int val){
addAtIndex(0,val);
}
public void addAtTail(int val){
addAtIndex(size,val);
}
public void addAtIndex(int index,int val){
if (index>size){
return;
}
if (index < 0) {
index = 0;
}
size++;
ListNode1 pred=head;
for (int i=0;i<index;i++){
pred=pred.next;
}
ListNode1 toAdd=new ListNode1(val);
toAdd.next=pred.next;
pred.next=toAdd;
}
public void deleteAtIndex(int index){
if (index<0||index>=size){
return;
}
size--;
ListNode1 pred=head;
for (int i=0;i<index;i++){
pred=pred.next;
}
pred.next=pred.next.next;
}
public void printList(){
ListNode1 current=head;
while(current !=null){
System.out.print(current.val+" ");
current=current.next;
}
}
}
三.总结
先创建ListNode1链表数据结构。再定义MyLinkedList类中定义链表的操作方法。最后用在main中创建对象并调用方法。