单链表-OC实现

作者: 1江春水 | 来源:发表于2019-04-16 14:38 被阅读1次

单链表 (OC实现)

节点定义 .h文件

//结点
@interface LinkNode : NSObject
//data
@property (nonatomic, assign) int data;
//next
@property (nonatomic, strong, nullable) LinkNode *next;

- (instancetype)initWithData:(int)data;

@end

结点定义 .m文件

@implementation LinkNode
- (instancetype)initWithData:(int)data {
    self = [super init];
    if (self) {
        self.data = data;
        self.next = nil;
    }
    return self;
}
@end

单链表linkList定义

linkList.h文件

@interface LinkList : NSObject
//头结点
@property (nonatomic, strong, readonly) LinkNode *head;
//初始化
- (instancetype)initWithNode:(LinkNode *)node;
//删除
- (void)deleteLinkList:(int)index;
//定位
- (int)locationLinkList:(LinkNode *)node;
//读取元素
- (LinkNode *)getLinkList:(int)index;
//插入
- (void)insertLinkList:(int)data index:(int)index;
//求表长
- (NSInteger)lengthLinkList;

//建表 尾插法 头插法
- (void)createLinkList:(NSArray *)arr;

@end

linkList.m文件

@interface LinkList ()
@property (nonatomic, assign) NSInteger length;
@property (nonatomic, strong, readwrite) LinkNode *head;
@end

链表初始化

//初始化
- (instancetype)initWithNode:(LinkNode *)node {
    self = [super init];
    if (self) {
        self.length = 0;
        self.head = node;
    }
    return self;
}

建表 头插发

- (void)createLinkList:(NSArray *)arr {
    self.length = arr.count;
    for (int i = 0; i<arr.count; i++) {
        LinkNode *node = [[LinkNode alloc] initWithData:[arr[i] intValue]];
        node.next = self.head.next;
        self.head.next = node;
    }
}

删除操作

- (void)deleteLinkList:(int)index {
    if (index > self.length) {
        return;
    }
    int k = 1;
    LinkNode *p = self.head.next;
    while (p.next != nil && k != index-1) {//找到待删前驱
        p = p.next;
        k++;
    }
    LinkNode *d = p.next;
    p.next = d.next;
    self.length--;
}

插入

- (void)insertLinkList:(int)data index:(int)index {
    LinkNode *p = self.head.next;
    int k = 1;
    while (p.next != nil && k != index-1) {//找到待插入前驱
        k++;
        p = p.next;
    }
    if (k == index-1) {
        LinkNode *node = [[LinkNode alloc] initWithData:data];
        node.next = p.next;
        p.next = node;
    }
    self.length++;
}

读取元素

- (LinkNode *)getLinkList:(int)index {
    LinkNode *current = self.head.next;//首结点
    int k = 1;
    while (current.next != nil && k != index) {
        k++;
        current = current.next;
    }
    if (k == index) {
        return current;
    }
    return nil;
}

定位

- (int)locationLinkList:(LinkNode *)node {
    if (node == nil) {
        return -1;
    }
    int k = 1;
    LinkNode *current = self.head.next;//首结点
    while (current.next != nil && node.data != current.data) {
        k++;
        current = current.next;
    }
    if (current) {
        return k;
    }
    return -1;
}

求表长

- (NSInteger)lengthLinkList {
    return self.length;
}

相关文章

  • 数据结构-系列文章

    线性表 单链表 单链表-OC实现 双链表 循环链表 栈 栈 队列 待完善 数组 待完善 树 待完善 图 待完善 哈...

  • 单链表-OC实现

    单链表 (OC实现) 节点定义 .h文件 结点定义 .m文件 单链表linkList定义 linkList.h文件...

  • 算法&单链表反转(三)

    主要介绍链表的简单用法以及单链表反转。网上的实现有很多,使用 OC/C 来实现的没有几个。 一、链表的基本用法 链...

  • 使用oc实现单链表

    https://www.cnblogs.com/XYQ-208910/p/11597067.html[https:...

  • 线性表之单链表实现

    线性表之单链表实现 实现单链表的初始化、插入、删除等基本运算 实现单链表的输入、输出运算 实现单链表的逆置、归并、...

  • 25_静态单链表的实现

    关键词: 单链表的一个缺点、静态单链表设计思路、静态单链表的继承层次结构、静态单链表的实现思路、静态单链表的实现 ...

  • 链表基本操作

    1、删除单链表节点 2、插入单链表结点 单链表具体实现

  • 单链表 & 双链表& 单向循环链表的实现

    单链表 具体实现: 双链表 代码实现: 单向循环链表的实现 代码实现:

  • 链表

    单链表 C实现 Java实现 双链表 C实现 Java实现

  • leetcode 单链表的各种算法

    1 递归实现:合并两个有序的单链表 2 递归实现:单链表逆序存入vector 3 循环实现:快慢指针找到单链表中间...

网友评论

    本文标题:单链表-OC实现

    本文链接:https://www.haomeiwen.com/subject/lbjbwqtx.html