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