zoukankan      html  css  js  c++  java
  • LeetCode-探索链表-设计链表

    设计链表

    设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next

    val 是当前节点的值,next 是指向下一个节点的指针/引用。

    public class MyLinkedList {
        //单链表结点类
        public class Node{
            public int val;
            public Node next;
            //实例构造器
            public Node(int item) => val=item;
        }
        //头结点和数量
        public Node head;
        public int count;
        public int Get(int index) {
            if(index>=count) return -1;//判断索引是否越界
            Node p=head;
            int num=0;
            //遍历链表,找到索引指向的结点位置,返回该结点的值
            while(true){
                if(num==index) return p.val;
                num++;
                p=p.next;
            }
        }
        public void AddAtHead(int val) {
            Node p=new Node(val);//更新head
            p.next=head;
            head=p;
            count++;
        }
        public void AddAtTail(int val) {
            Node p=new Node(val);
            Node q=head;
            //遍历链表找到尾部,添加节点
            while(q.next!=null) q=q.next;
            q.next=p;
            count++;
        }
        public void AddAtIndex(int index, int val) {
            //索引为0直接执行在头结点前添加结点的方法
            if(index==0){
                AddAtHead(val);
                return;
            }
            //索引和链表长度相直接执行在尾部添加结点的方法
            if(index==count){
                AddAtTail(val);
                return;
            }
            if(index>=count) return;//索引越界直接返回
            int num=0;
            Node p=head;
            //循环遍历,在索引指向结点之前添加结点
            while(true){
                num++;
                if(num==index){
                    Node q=new Node(val);
                    q.next=p.next;
                    p.next=q;
                    count++;
                    return;
                }
                p=p.next;
            }
        }
        public void DeleteAtIndex(int index) {
            if(index>=count) return;//索引越界直接返回
            int num=0;
            Node p=head;
            //遍历链表,删除索引指向的结点
            while(true){
                num++;
                if(num==index){
                    p.next=p.next.next;
                    count--;
                    return;
                }
                p=p.next;
            }
        }
    }

    单链表节点类

    LeetCode笔记中链表相关题目,若不单独说明,代码中使用的链表都是单链表,其节点类如下代码所示。

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     public int val;
     *     public ListNode next;
     *     public ListNode(int x) { val = x; }
     * }
     */
  • 相关阅读:
    java中的四种内部类
    09_TomCat_基础知识
    08_XML的解析_SAX解析
    IO流07_输入输出流总体系
    IO流06_处理流
    IO流05_OutputStream和Writer输出流
    IO流04_InputStream和Reader输入流
    IO流03_流的分类和概述
    IO流02_文件过滤器
    IO流01_File类
  • 原文地址:https://www.cnblogs.com/errornull/p/10103584.html
Copyright © 2011-2022 走看看