You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Objective-C实现单链表反转?附已有代码

单链表反转方法的Objective-C实现

没问题,我来帮你补全reverse方法的代码,同时拆解每一步的逻辑,让你清楚为什么这么写:

首先给出完整的实现代码:

- (void)reverse {
    // 边界处理:空链表或者只有一个节点,无需反转
    if (!self.head || !self.head.next) {
        return;
    }
    
    MMNode *prevNode = nil;
    MMNode *currentNode = self.head;
    MMNode *nextNode = nil;
    
    // 反转后原来的头节点变成尾节点,更新hail(猜测是tail的笔误?)
    self.hail = self.head;
    
    while (currentNode != nil) {
        // 先保存下一个节点,避免修改指针后丢失后续节点
        nextNode = currentNode.next;
        // 反转当前节点的指向:让它指向之前的节点
        currentNode.next = prevNode;
        // 指针整体后移,准备处理下一个节点
        prevNode = currentNode;
        currentNode = nextNode;
    }
    
    // 循环结束后,prevNode就是新的头节点
    self.head = prevNode;
}

代码逻辑拆解:

  • 边界判断:如果链表是空的,或者只有一个节点,直接返回即可——反转前后链表状态没有变化,没必要做多余操作。
  • 指针初始化:用三个指针跟踪当前节点、前一个节点和下一个节点,这是迭代法反转链表的标准做法,能避免链表断链。
  • 更新尾节点:反转完成后,原来的头节点会变成新的尾节点,所以把self.hail(我猜你是想写tail?)设置为原来的head。
  • 循环反转:遍历每个节点时,先保存下一个节点的引用,再把当前节点的next指针指向之前的节点,最后把三个指针依次后移,直到遍历完所有节点。
  • 更新头节点:循环结束时,prevNode会停在原来的尾节点位置,这就是反转后的新头节点,把self.head指向它就完成了整个反转操作。

你可以调用printList方法来验证反转后的结果是否正确~

内容的提问来源于stack exchange,提问作者user9067376

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:13:26