删除 objective -c 中的最后一个节点链表

removing last node linked list in objective -c

我正在尝试为 objective-c 中的链表实现 removeLast 函数。我的添加函数 属性 运行良好,因为我可以看到我创建的节点,但是当我尝试删除节点时它不起作用。我曾尝试为此寻找一般解决方案,但没有提出任何建议。我应该看看 objective-c 有什么特别之处吗?

-(void) removeLast{
    Node *newNode = [[Node alloc]init];
    Node *tail = [[Node alloc]init];

    if (self.head == NULL){
        NSLog(@"No items to remove");
    }
    else{
        newNode = self.head;
        tail= self.head;

        while (tail != NULL) {
            tail = tail.next;
            if (tail != NULL){
                newNode = tail;
            }
        }
        newNode.next = NULL;
    }
}

我相信你把算法复杂化了。如果你总是向前看一步,你就不需要保留对前面 link 的引用:

- (void) removeLast {
    if (self.head == NULL) {
        NSLog(@"Empty list");
    } else if (self.head.next == NULL) {
        self.head = NULL;
    } else {
        Node* current = self.head;
        while (current.next.next != NULL)
            current = current.next;
        current.next = NULL;
    }
}

这将迭代直到到达倒数第二个节点,此时 current.next.next 将为空。然后它使它成为最后一个节点。