单链表

思路:
1.两个对象:单链表LinkList、结点Node
2.初始化对象

LinkList:头结点head、长度size
Node:数据data、指针next

3.赋予对象方法

Node:增删改查

代码实现:

class LinkList{

    Node head=null;
    int size=0;

    static class Node{
        int data;
        Node next;

        public Node(int data,Node next){
            this.data=data;
            this.next=next;
        }
    }

    public Node search(int data){
        Node node =head;
        int index=0;
        while(node!=null){
            if(node.data==data){
                System.out.println("The index of "+data+" is "+index);
                return node;
            }
            node=node.next;
            index++;
        }
        return null;
    }

    public void append(int data){
        Node newNode=new Node(data,null);
        if(size==0){
            head=newNode;
        }else {
            Node node=head;
            while(node.next!=null) node = node.next;
            node.next = newNode;
        }
        size++;
    }

    public void insert(int index, int data){
        Node newNode=new Node(data,null);
        if(size==0||index==size) append(data);
        else if(index>size||index<0) return;
        else{
            if(index==0){
                newNode.next=head;
                head=newNode;
            }else{
                Node node=head;
                for(int i=1;i<index;i++) node=node.next;
                newNode.next=node.next;
                node.next=newNode;
            }
            size++;
        }
    }

    public void update(int oldData,int newData){
        Node node=search(oldData);
        if(node==null) return;
        else node.data=newData;
    }

    public void delete(int data){
        Node prev=head;
        Node node=prev.next;
        if(head.data==data){
            head=head.next;
            size--;
        }else {
            while(node!=null) {
                if (node.data == data) {
                    prev.next=node.next;
                    size--;
                    return;
                }
                prev=prev.next;
                node=node.next;
            }
            return;
        }
    }

    public void print(){
        System.out.print("size:"+size+"\t");
        Node node=head;
        while(node.next!=null){
            System.out.print(node.data+"->");
            node=node.next;
        }
        System.out.println(node.data);
    }

}

class Solution {

    public static void main(String[] args){
        LinkList linkList=new LinkList();
        linkList.append(1);
        linkList.append(2);
        linkList.append(3);
        linkList.append(4);
        linkList.append(5);
        linkList.append(6);
        linkList.print();
        linkList.insert(5,8);
        linkList.print();
        linkList.search(6);
        linkList.delete(2);
        linkList.print();
        linkList.update(6,7);
        linkList.print();
    }
}

运行结果:

size:6  1->2->3->4->5->6
size:7  1->2->3->4->5->8->6
The index of 6 is 6
size:6  1->3->4->5->8->6
The index of 6 is 5
size:6  1->3->4->5->8->7
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。 ...
    呼啦啦的爱阅读 376评论 0 0
  • 概念 **单链表**是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。 链表中的数据是以...
    _涼城阅读 333评论 0 2
  • 一、首先介绍一下数据在内存中的存储(针对于c/c++): 1、栈区[stack]:由编译器自动分配释放,存放函数的...
    Z_Aaron阅读 2,275评论 0 1
  • 上次有同学讲到了链表,刚好我也学了一下,总结一下自己的学习过程,方便自己以后回顾。有疑惑的地方随时可以咨询我,有错...
    MuteZ阅读 3,105评论 0 1
  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 4,608评论 1 45