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

时间:2015-01-27 20:47:49

标签: objective-c linked-list

我正在尝试为objective-c中的链表实现removeLast函数。我的add函数属性运行良好,因为我可以看到我创建的节点,但是当我尝试删除节点时它不起作用。我试过为此寻找一般解决方案,但还没有提出任何建议。对于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;
    }
}

1 个答案:

答案 0 :(得分:1)

我相信你的算法过于复杂。如果您始终领先一步,则无需保留对上一个链接的引用:

- (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为空时,迭代直到它到达倒数第二个节点。然后它使最后一个节点。