iOS - 分别用OC和java实现链表数组

具体代码 : https://github.com/coderMyy/MYDictionary

OC :

#import <Foundation/Foundation.h>

@interface MYLinkedArray : NSObject

@property (assign , nonatomic) NSUInteger size; //数组长度


- (void)addObject:(NSObject *)obj; //添加元素

- (void)remove:(NSObject *)obj; //移除指定元素

- (void)removeAtIndex:(NSInteger)index; //移除指定索引元素

+ (instancetype)array; //数组初始化

@end

@interface Node : NSObject

@property (strong , nonatomic) Node *previous; //上个节点

@property (strong , nonatomic) Node *next; //下个节点

@property (strong , nonatomic) NSObject *content; //当前节点内容

@end

#import "MYLinkedArray.h"

@interface MYLinkedArray ()

@property (nonatomic, strong) Node *first; //首个节点

@property (nonatomic, strong) Node *last; //最后节点    

@end

@implementation MYLinkedArray

//添加元素
- (void)addObject:(NSObject *)obj
{
    _size ++ ;
    Node *node = [[Node alloc]init];
    //首个节点为空
    if (!_first) {
        _first = node;
        _last  = node;
        node.previous = nil;
        node.next     = nil;
        node.content  = obj;
        return;
    }

   //数组中有值
    node.previous = _last;
    node.next     = nil;
    node.content  = obj;
    _last         = node;
    _last.next    = node;
}


//移除元素
- (void)remove:(NSObject *)obj
{
    if (!obj||!_size) return;

    Node *tmpNode = _first;

    for (NSInteger index = 0; index < _size; index ++) {

        if ([tmpNode.content isEqual:obj]) {

            [self removeNode:tmpNode]; //移除节点

            break;
        }
    }
}

//根据索引移除元素
- (void)removeAtIndex:(NSInteger)index
{
    if (index<0||index>=_size) return;

    Node *tmpNode = _first;

    for (NSInteger i = 0; i < _size; i ++) {

        if (i == index) {

            [self removeNode:tmpNode]; //移除节点

            break;
        }
        tmpNode   = tmpNode.next;
    }
}

//私有
- (void)removeNode:(Node *)node
{
    //连接上下节点
    Node *preNode     = node.previous;
    Node *nextNode    = node.next;
    preNode.next      = nextNode;
    nextNode.previous = preNode;
    node.content      = nil; //清空被移除节点内容
    _size -- ;//长度更新
}

//初始化
+ (instancetype)array
{
    return [[self alloc]init];
}


@end

//Node
@implementation Node

@end

java :

package com.jyall.collection;   

public class MYLinkedList {

    private Node first ; //第一个节点
    private Node last ; //最后一个节点
    private int size ; //数组大小

    public void add(Object obj) {

        Node node = new Node();//初始化节点
        node.setSelfObj(obj); //赋值
        size ++ ; //长度+1
        if (first == null) { //第一个节点为空,链表里没有任何内容

            first = node;
            last  = node;
            first.setPrevious(null);//上个节点为空
            first.setNext(null); //下个节点为空
            return;
        }
        //之后的节点
        last.setNext(node); //当前最后一个节点的下一个
        node.setPrevious(last);//新节点的上一个
        last      = node; //更新最后一个节点
        node.setNext(null); 
    }

    //长度
    public int size() {
        return size;
    }

    //获取index对应的值
    public Object get(int index) {

        Node tmpNode = first;
        if (first != null) {

            //逐个遍历获取对应的值
            for (int i = 0; i < index; i++) {
                tmpNode = tmpNode.getNext();
            }
        }
        return tmpNode.getSelfObj();
    }

    //remove
    public void remove(Object obj) {

        Node tmp = first;

        for (int i = 0; i < size; i++) {

            if (tmp.getSelfObj().equals(obj)){

                //连接上下节点
                Node previous = (Node)tmp.getPrevious();
                Node next = (Node)tmp.getNext();
                previous.setNext(next);
                next.setPrevious(previous);
                tmp.setSelfObj(null); //清空被移除节点内容
                size -- ;
                break;
            };
            tmp = (Node)tmp.getNext();
        }
    }


    public static void main(String[] args) {

        MYLinkedList list = new MYLinkedList();
        list.add("123");
        list.add("456");
        System.out.println(list);
        System.out.println(list.size);
    }
}


//节点
class Node{

    private Node previous; //上个节点

    private Node next;  //下个节点

    private Object selfObj; //当前节点内容



    public Node getPrevious() {
        return previous;
    }
    public void setPrevious(Node previous) {
        this.previous = previous;
    }
    public Node getNext() {
        return next;
    }
    public void setNext(Node next) {
        this.next = next;
    }
    public Object getSelfObj() {
        return selfObj;
    }
    public void setSelfObj(Object selfObj) {
        this.selfObj = selfObj;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值