美文网首页
iOS 实现删除链表中的倒数第 k 个节点

iOS 实现删除链表中的倒数第 k 个节点

作者: HenryCheng | 来源:发表于2021-01-20 14:56 被阅读0次

之前写算法都是用 Java 实现,现在尝试用 Objective-C 来实现以下这个算法,首先定义链表节点如下

#import <Foundation/Foundation.h>


@interface ListNode : NSObject

@property (nonatomic, assign) int value;
@property (nonatomic, strong) ListNode *next;
- (instancetype)initWithValue:(int)value next:(ListNode *)next;

@end

...

#import "ListNode.h"

@implementation ListNode

- (instancetype)initWithValue:(int)value next:(ListNode *)next {
    if (self == [super init]) {
        self.value = value;
        self.next = next;
    }
    return self;
}

// 重写打印信息
- (NSString *)description {
    [super description];
    NSString *des = @"";
    ListNode *tmpNode = self;
    while (tmpNode != nil) {
        des = [des stringByAppendingString:[NSString stringWithFormat:@"%@%d", des.length == 0 ? @"" : @"->", tmpNode.value]];
        tmpNode = tmpNode.next;
    }
    return des;
}

@end

可以看到定义的 .h 和 .m 文件还是相对简单的,然后我们来实现具体的算法

- (void)viewDidLoad {
    [super viewDidLoad];
    
    ListNode *l5 = [[ListNode alloc] initWithValue:5 next:nil];
    ListNode *l4 = [[ListNode alloc] initWithValue:4 next:l5];
    ListNode *l3 = [[ListNode alloc] initWithValue:3 next:l4];
    ListNode *l2 = [[ListNode alloc] initWithValue:2 next:l3];
    ListNode *l1 = [[ListNode alloc] initWithValue:1 next:l2];
    ListNode *root = [[ListNode alloc] initWithValue:0 next:l1];
    // 删除倒数第二个,也就是 l4 这个节点
    [self deleteNode:root index:2];

}

- (void)deleteNode:(ListNode *)root index:(int)index {
    if (root == nil || index <= 0) {
        return;
    }
    ListNode *slow = root;
    ListNode *fast = root;
    while (index > 0) {
        fast = fast.next;
        if (fast == nil) {
            NSLog(@"index 超出链表长度");
            return;
        }
        index--;
    }
    while (fast.next != nil) {
        slow = slow.next;
        fast = fast.next;
    }
    slow.next = slow.next.next;
    NSLog(@"%@", root);
}

打印结果

2021-01-20 14:46:44.605070+0800 MM_test[22799:202914] 0->1->2->3->5

相关文章

  • 在单链表和双链表中删除倒数第k个节点

    【题目】分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点。【解析】先来分...

  • LeetCode题解之返回倒数第 k 个节点

    返回倒数第 k 个节点 题目描述 实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。 示例 : 说明...

  • 链表面试题

    1.链表反转 2.倒序输出链表 3.输出链表中倒数第 k 个节点,k从1开始计数。 4.删除单链表指定节点 5.查...

  • 链表

    链表基本操作 从尾到头打印链表 删除链表的节点 链表中倒数第K个节点 反转链表 合并两个有序链表 两个链表的第一个...

  • 2018-07-26

    合并有顺序的数组 打印两个有序链表的公共部分 在单链表和双链表中删除倒数第k个节点 单链表 双链表 删除链表的中间...

  • 单向链表算法

    单向链表 反转单向链表 单链表查找倒数第k个节点 单链表递归倒序打印 单链表排序 单链表删除重复节点

  • leecode刷题(21)-- 删除链表的倒数第N个节点

    leecode刷题(21)-- 删除链表的倒数第N个节点 删除链表的倒数第N个节点 描述: 给定一个链表,删除链表...

  • swift创建链表三

    删除链表中倒数第N个节点

  • LeetCode 每日一题 [54] 链表中倒数第k个节点

    LeetCode 链表中倒数第k个节点[简单] 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,...

  • 剑指offer-14-链表中倒数第k个节点

    链表中倒数第k个节点: 输入一个链表,输出该链表中倒数第k个结点。 思路:先新建一个距离头节点k的指针,然后一起移...

网友评论

      本文标题:iOS 实现删除链表中的倒数第 k 个节点

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