GGMU
GGMU

Reputation: 175

removing last node linked list in objective -c

I am trying to implement a removeLast function for a linked list in objective-c. My add function property works well because I can see the node I created, but when I try to remove a node it does not work. I have tried looking up general solutions for this, but have not come up with anything. Is there something special with objective-c that I should take a look at?

-(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;
    }
}

Upvotes: 0

Views: 196

Answers (1)

sprinter
sprinter

Reputation: 27976

I believe you've overcomplicated the algorithm. You don't need to keep a reference to the previous link if you always look one step ahead:

- (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;
    }
}

This iterates through until it reaches the next-to-last node when current.next.next will be null. Then it makes that the last node.

Upvotes: 1

Related Questions