数据结构&算法拾遗(1)-- 实现单链表

本文详细介绍了一个简单的单链表数据结构的实现方法,包括头部插入、删除,指定位置插入和删除等基本操作,并通过具体代码示例展示了如何在实际中运用这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 工作了好几个月了,发现自己工作更多的接触的是业务以及组件方面的东西,算法并没有太多机会复习到,然而扎实的算法功底是一个工程师的必须技能,这方面以前在学校也是学的一团糟,这里就利用业余机会把这些知识好好巩固一边吧

 

首先第一课,实现一个单链表(不难,但是很容易出错)

package myowndataStructures;

/**
 * Created by xudong on 2019/5/10.
 */
public class SinglyLinkedList {

    private Nodes head;
    
    //链表头部插入
    public void insertHead(int value){
        Nodes newNode = new Nodes(value);
        newNode.next = head;
        head = newNode;
    }

    public void deleteHead(){
        if(isEmpty()){
            System.out.println("this is a empty list");
        }else {
            head = head.next;
        }

    }
    //指定位置插入
    public void insertNth(int index, int value){
        if(index > 0 && index < size()){
            Nodes newNode = new Nodes(value);
            Nodes beforeNode = head;
            for(int i = 0; i < index-1; i++){
                beforeNode = beforeNode.next;
            }
            newNode.next = beforeNode.next;
            beforeNode.next = newNode;
        }else if( index == 0){
            insertHead(value);
        } else {
            System.out.println("the index is not right");
        }

    }

    public void deleteNth(int index){
        if(index >= size() || index < 0){
            System.out.println("the index is out of size");
        }else if(index == 0){
            deleteHead();
        }else {
            Nodes preNode = head;
            for(int i = 0; i < index - 1; i++){
                preNode = preNode.next;
            }
            preNode.next = preNode.next.next;
        }

    }

    public boolean isEmpty(){
        return size() == 0;
    }

    public String display(){
        String result = "";
        Nodes currentNode = head;
        while (currentNode != null){
            result = result + currentNode.value + "->";
            currentNode = currentNode.next;
        }
        return result;
    }

    public int size(){
        if(head == null){
            return 0;
        }else {
            Nodes markedNode = head;
            int i = 1;
            while (markedNode.next != null){
                i++;
                markedNode = markedNode.next;
            }
            return i;
        }
    }

    public static void main(String[] args) {
        SinglyLinkedList list1 = new SinglyLinkedList();

        list1.insertHead(11);
        list1.insertHead(12);
        list1.deleteHead();
        System.out.println(list1.display());

        list1.insertHead(1);
        list1.insertNth(1, 2);
        list1.insertNth(2,3);
        list1.insertNth(3,4);
        System.out.println(list1.display());

        list1.deleteNth(3);
        System.out.println(list1.display());

        System.out.println(list1.isEmpty());
        System.out.println(list1.size());
    }

}


class Nodes {
    int value;

    Nodes next;

    public Nodes(int value){
        this.value = value;
        this.next = null;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值