java实现链表
一、单向链表
- 单指针,指针指向下一个元素
- 指定位置新增元素,如果是在头部位置,先初始化节点,将头部节点赋值给这个节点的下一位指针,如果不是头部位置,循环遍历链表找到要插入的位置,将当前节点的下一位指针指向新增节点的下一位指针,然后将新增节点赋值给当前节点的下一位指针。
- 删除节点,循环遍历链表,找到要删除位置的元素,然后设置头部节点和头部节点的下一位,循环遍历,每一次遍历不仅要找到当前节点的下一位指针,还要找到当前节点下一位指针指向的节点指向的下一位节点,当找到要删除的位置时,将当前指针指向的一位节点的下一位节点赋值给当前节点的下一位指针
public class SingleLinkedList {
Node head;
int size;
static class Node{
int data;
Node next;
public Node() {
}
public Node(int data, Node next) {
this.data = data;
this.next = next;
}
}
public SingleLinkedList() {
}
public SingleLinkedList(Node head, int size) {
this.head = head;
this.size = size;
}
public void addLast(int data){
Node node = new Node(data,null);
if(head==null){
head=node;
size++;
return;
}
Node head = this.head;
while (head.next!=null){
head=head.next;
}
head.next=node;
size++;
}
public void addHead(int data){
Node node = new Node(data,null);
if(head==null){
head=node;
return;
}
node.next=head;
head=node;
size++;
}
public void addIndex(int index,int data){
if(index<0||index>size){
System.out.println("下标越界");
return;
}
Node node1 = new Node(data,null);
if(index==0){
node1.next=head;
head=node1;
return;
}else {
index--;
}
Node node = head;
int i = 0;
while (node.next!=null){
if(index==i) {
node1.next=node.next;
node.next = node1;
size++;
break;
}
node=node.next;
i++;
}
}
public int getIndexByData(int index){
if(index<0||index>size){
System.out.println("下标越界");
}
Node node = head;
int a=0;
while (node.next!=null){
if(index==a){
return node.data;
}
node=node.next;
a++;
}
return 0;
}
public void remove(int index){
if(index<0||index>size){
System.out.println("下标越界");
}
index--;
Node node = head;
Node next = node.next;
int a=0;
while (node.next!=null){
if(index==a){
node.next=next.next;
return;
}
node=node.next;
next=next.next;
a++;
}
}
@Override
public String toString() {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append('[');
Node node = head;
while (node!=null){
stringBuffer.append(node.data);
if(node.next!=null){
stringBuffer.append(',');
}
node=node.next;
}
stringBuffer.append(']');
return stringBuffer.toString();
}
public static void main(String[] args) {
SingleLinkedList linkedList = new SingleLinkedList();
linkedList.addLast(1);
linkedList.addLast(2);
linkedList.addLast(3);
linkedList.addLast(4);
linkedList.addLast(5);
linkedList.addHead(6);
linkedList.addIndex(2,9);
linkedList.remove(2);
System.out.println(linkedList.toString());
}
}