删除 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
将为空。然后它使它成为最后一个节点。
我正在尝试为 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
将为空。然后它使它成为最后一个节点。