iOS - 分别用OC和java实现链表数组 原创
最新推荐文章于 2024-06-16 09:30:05 发布

阅读量1.4k
收藏 1
-
-
coderMy
码龄9年
关注
具体代码 : 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; } }