作业1 OO基础1-2、设计一个带表头的双向链表,要求链表中可以存放任意类型的数据)

作业1 OO基础1-2、设计一个带表头的双向链表,要求链表中可以存放任意类型的数据)

提供以下方法:
(1)insert:在某个位置插入对象;
(2)insert:在链表的最后插入对象;
(2)delete:在某个位置删除对象;
(3)delete:删除链表中与x相同的元素;
(4)size:返回当前链表中对象的个数;
(5)isEmpty:判断链表是否为空;
(6)traverse:遍历链表,打印出所有的元素;
(7)getData:取得某个位置的对象。构造main函数进行测试。(40.0分)

代码

LinkList.java

import java.util.Scanner;

public class LinkList {
    static class Node {
        Object data;
        Node next;
        Node front;

        public Node() {
            data = 0;
            next = null;
            front = null;
        }

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

        public Object getData() {
            return data;
        }

        public void setData(int data) {
            this.data = data;
        }
    }

    public int size;
    public Node head;
    public Node rear;

    public LinkList() {
        this.size = 0;
        head = new Node();
        rear = new Node(0, head, null);
        head.next = rear;
    }

    //insert:在某个位置插入对象
    public void insert(int pos, int data) {
        Node t = new Node(data, null, null);
        Node f = head;
        for (int i = 0; i < pos; i++) {
            f = f.next;
        }
        t.next = f;
        t.front = f.front;
        f.front.next = t;
        f.front = t;
        size++;
    }

    //insert:在链表的最后插入对象;
    public void insert(int data) {
        Node t = new Node(data, null, null);
        rear.front.next = t;
        t.front = rear.front;
        t.next = rear;
        rear.front = t;
        size++;
    }

    //delete:在某个位置删除对象
    public void delete(int pos, LinkList l) {
        Node f = head;
        for (int i = 0; i < pos; i++) {
            f = f.next;
        }
        f.front.next = f.next;
        f.next.front = f.front;
    }

    //delete:删除链表中与x相同的元素
    public void delete(int x) {
        Node f = head.next;
        while (f.next != null) {
            if (f.data.equals(x)) {
                f.front.next = f.next;
                f.next.front = f.front;
            }
            f = f.next;
        }
    }

    //size:返回当前链表中对象的个数
    public int size() {
        return size;
    }

    //isEmpty:判断链表是否为空
    public boolean isEmpty() {
        return size == 0;
    }

    //traverse:遍历链表,打印出所有的元素
    public void traverse() {
        Node f = head.next;
        while (f.next != null) {
            System.out.print(f.data + " ");
            f = f.next;
        }
        System.out.println();
    }

    //getData:取得某个位置的对象
    public Object getData(int pos) {
        Node f = head;
        for (int i = 0; i < pos; i++) {
            f = f.next;
        }
        return f.data;
    }

    public static void main(String[] args) {
        LinkList ls = new LinkList();
        Scanner scanner = new Scanner(System.in);
        System.out.print("请依次输出数据(输入0时停止):");
        while (true) {
            int s = scanner.nextInt();
            if (s == 0) {
                break;
            } else {
                ls.insert(s);
            }
        }
        System.out.println("链表大小:" + ls.size());//输出链表大小

        System.out.println("链表是否为空:" + ls.isEmpty());//判断链表是否为空

        System.out.print("链表中的所有元素:");
        ls.traverse();//打印出所有元素

        System.out.print("在链表最后插入11:");
        ls.insert(11);//在最后插入11
        ls.traverse();

        System.out.print("在位置2上插入44:");
        ls.insert(2, 44);//在位置2上插入44
        ls.traverse();

        System.out.print("删除位置4上的数:");
        ls.delete(4, ls);//删除位置4上的数
        ls.traverse();

        System.out.print("删除链表中所有的2:");
        ls.delete(2);//删除链表中所有的2
        ls.traverse();
        System.out.println("获得位置2上的数:" + ls.getData(2));//获得位置2上的数


    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值