我正在尝试为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;
}
}
答案 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
为空时,迭代直到它到达倒数第二个节点。然后它使最后一个节点。