coderMy

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

最新推荐文章于 2024-06-16 09:30:05 发布
最新推荐文章于 2024-06-16 09:30:05 发布

阅读量1.4k

收藏 1

具体代码 : 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; } }
写评论
1
文章收藏成功
前往CSDN APP阅读全文
CSDN APP记录你的成长
微信小程序收藏浏览更方便
截图/长按 保存本地,用微信扫码打开
进入小程序随时浏览/收藏技术文章
需要前往CSDN APP登录即可继续互动
成就一亿技术人!
拼手气红包6.0元
发红包
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
前往CSDN APP阅读全文
阅读体验更佳

CSDN

成就一亿技术人

浏览器
分享
请升级应用版本