package com.zhouyou.list;
public class MyLinkedList {
private ListNode head;
private int size = 0;
public void insertHead(int data){
//插入链表的头部 data就是插入的数据
ListNode node = new ListNode(data);
//如果原来就有数据呢?
node.next = head;
head = node;
}
public void insertNth(int data,int position){
if (position == 0){
// 头部
insertHead(data);
}else {
ListNode cur = head;// 引用
for (int i = 1; i < position; i++) {
cur = cur.next;
}
// 插入在中间,需要把前面的遍历找到前一位的引用
ListNode newNode = new ListNode(data);
newNode.next = cur.next; // 新插入的节点 指向 后面的 保证和后面没有断开链接
cur.next = newNode;
}
}
public void deleteHead(){
// 不能 等于null,否则断链
head = head.next;
}
public void deleteNth(int position) {//O(n)
if(position == 0) {
deleteHead();
}else{
ListNode cur = head;
for(int i = 1; i < position ; i ++){
cur = cur.next;
}
cur.next = cur.next.next; //cur.next 表示的是删除的点,后一个next就是我们要指向的
}
}
public void print(){
ListNode cur = head;
while(cur != null){
System.out.print(cur.value + " ");
cur = cur.next;
}
System.out.println();
}
public static void main(String[] args) {
MyLinkedList myList = new MyLinkedList();
myList.insertHead(5);
myList.insertHead(7);
myList.insertHead(10);
myList.print(); // 10 -> 7 -> 5
myList.deleteNth(0);
myList.print(); // 7 -> 5
myList.deleteHead();
myList.print(); // 5
myList.insertNth(11, 1);
myList.print(); // 5 -> 11
myList.deleteNth(1);
myList.print(); // 5
}
}
class ListNode{
int value; //值
ListNode next; //下一个的指针
ListNode(int value){
this.value = value;
this.next = null;
}
}
数据结构与算法-基础数据结构:链表学习
最新推荐文章于 2024-07-11 15:49:26 发布