链表基础实现
主要操操作为建立链表,删除节点等
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 ListNode{
int val;
ListNode next;
ListNode(int x){
val=x;
}
}
具体的代码
class MyLinkedList{
int size; //定义链表的长度
ListNode head;//头节点
//初始化数据结构
public MyLinkedList(){
size=0;
head =new ListNode(0);
}
//查看节点的值
public int get (int index){
if(index<0||index>=size) return -1;
ListNode curr =head;
for(int i=0;i<=index;i++) curr=curr.next;
return curr.val;
}
//在第一个元素前面添加元素
public void addAtHead(int val){
addAtIdex(0,val);
}
//在最后一个元素添加节点
public void addAtTail(int val){
addAtIndex(size,val);
}
//在指定的位置添加节点
public void addAtIndex(int index,int val){
if(index<0) index=0;
if (index>size) return;
ListNode pre=head,toadd=new ListNode(val)
for (int i=0;i<index;i++) pre=pre.next;
toadd.next=pre.next;
pre.next=toadd;
size++;
}
//删除节点
public void deleteIndex(int index){
if(index<0 || index>=size) return;
ListNode pre=head;
for (int i=0;i<index;i++) pre=pre.next;
pre.next=pre.next.next;
size--;
}