iOS

来源:互联网 发布:中国等级观念知乎 编辑:程序博客网 时间:2024/06/05 04:12

具体代码 : 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;    }}
0 0