链表是一种物理存储上的非连续存储结构,数据元素的逻辑是通过链表中的引用链接次序实现的,
在这里整理了一线单链表的增删改查。
package seqList;
public class SingleLinkList {
private int size;
private Node head;
class Node{
int val;
Node next;
public Node(int val){
this.val=val;
}
}
public void addFirst(int val){
Node node=new Node(val);
if (head==null){
head=node;
}else {
node.next=head;
head=node;
}
size++;
}
public void addIndex( int index,int val){
if (index<0||index>size){
System.err.println("error");
}
if(index==0){
addFirst(val);
return;
}
Node node =new Node(val);
Node prev=head;
for (int i = 0; i < index-1; i++) {
prev=prev.next;
}
node.next=prev.next;
prev.next=node;
size++;
}
public void addLast(int val){
addIndex(size,val);
}
public int get(int index){
if (rangecheck(index)){
Node node=head;
for (int i = 0; i < index;i++) {
node=node.next;
}
return node.val;
}else {
System.err.println("error");
return -1;
}
}
public boolean rangecheck(int index){
if(index<0||index>size){
return false;
}
return true;
}
public void set(int index,int new_val){
if(rangecheck(index)){
Node node=head;
for (int i = 0; i < index; i++) {
node=node.next;
}
node.val=new_val;
}else {
System.err.println("error");
}
}
public void removeIndex(int index){
if (rangecheck(index)) {
if (index == 0) {
Node temp = head;
head = head.next;
temp.next = null;
size--;
} else {
Node prve = head;
for (int i = 0; i < index - 1; i++) {
prve = prve.next;
}
Node cur = prve.next;
prve.next = cur.next;
cur.next = null;
size--;
}
}
}
public void removeFist(){
removeIndex(0);
}
public void removeLast(){
removeIndex(size-1);
}
public void removeValOnce(int val){
Node prev=head;
for (int i = 0; i < size; i++) {
if (prev.next.val==val){
Node cur=prev.next;
prev.next=cur.next;
cur.next=null;
size--;
return;
}
prev=prev.next;
}
}
public void removeValAll(int val){
while (head!=null&&head.val==val){
Node temp=head;
head=temp.next;
temp.next=null;
size--;
}
if (head==null){
return;
}else {
Node prve=head;
while (prve.next!=null){
if (prve.next.val==val){
Node cur=prve.next;
prve.next=cur.next;
cur.next=null;
size--;
}else {
prve=prve.next;
}
}
}
}
public String toString(){
String str="";
Node node=head;
while (node!=null){
str+=node.val;
str+="->";
node=node.next;
}
str+="null";
return str;
}
}