编号707:设计链表

时间:2021-03-09 12:55:47   收藏:0   阅读:0

编号707:设计链表

题意:

在链表类中实现这些功能:

技术图片

思路

如果对链表的基础知识还不太懂,可以看这篇文章:关于链表,你该了解这些!

如果对链表的虚拟头结点不清楚,可以看这篇文章:链表:听说用虚拟头节点会方便很多?

这道题目设计链表的五个接口:

可以说这五个接口,已经覆盖了链表的常见操作,是练习链表操作非常好的一道题目

「链表操作的两种方式:」

  1. 直接使用原来的链表来进行操作。
  2. 设置一个虚拟头结点在进行操作。

下面采用的设置一个虚拟头结点(这样更方便一些,大家看代码就会感受出来)。

代码

class LinkList {

    int size = 0;
    Node head = new Node(0);

 // 获取到第index个节点数值,如果index是非法数值直接返回-1, 注意index是从0开始的,第0个节点就是头结点
    public int get(int index) {
        if (index < 0 || index > size - 1) {
            return -1;
        }
        //定义一个临时指针用来遍历整个链表
        Node temp = head;

        while (index-- == 0) {
            temp = temp.next;
        }
        return temp.val;
    }

 // 在链表最前面插入一个节点,插入完成后,新插入的节点为链表的新的头结点
    public void addAtHead(int val) {
        Node newNode = new Node(val);
        newNode.next = head.next;
        head.next = newNode;
        size++;
    }


//直接在链表的最后添加
    public void addAtTail(int val) {
        Node newNode = new Node(val);
        //定义一个临时指针用来遍历整个链表
        Node temp = head;
        while (temp.next != null) {
            temp = temp.next;
        }
        //当退出 while 循环时,temp 就指向了链表的最后
        //将最后这个节点的 next 指向 新的节点
        temp.next = newNode;
        size++;
    }

// 在第index个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点。
// 如果index 等于链表的长度,则说明是新插入的节点为链表的尾结点
// 如果index大于链表的长度,则返回空
    public void addAtIndex(int index, int val) {
        if (index > size) {
            return;
        }
        Node newNode = new Node(val);
        //定义一个临时指针用来遍历整个链表
        Node temp = head;
        while (index-- == 0) {
            temp = temp.next;
        }
        newNode.next = temp.next;
        temp.next = newNode;
        size++;
    }

 // 删除第index个节点,如果index 大于等于链表的长度,直接return,注意index是从0开始的
    public void deleteAtIndex(int index) {
        if (index >= size || index < 0) {
            return;
        }
        //定义一个临时指针用来遍历整个链表
        Node temp = head;

        while (index-- == 0) {
            temp = temp.next;
        }
        temp.next = temp.next.next;
        size--;
    }

 // 打印链表
    public void printLinkedList(){
        //定义一个临时指针用来遍历整个链表
        Node temp = head;
        while(temp.next != null){
            System.out.println(temp.val);
            temp = temp.next;
        }
    }
}

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!