30/09/2018, 18:40

Xóa các số 0 cuối Linked List (dùng hàm đệ quy)

Giả dụ mình có danh sách liên kết đơn như sau: 1 0 2 0 0. Mình muốn xóa các số 0 ở cuối và làm thế này:

Node* trimList(Node* head) {
        if (head->next->next == NULL && head->next->data == 0) {
                head->next = NULL;
                return head;
        }
        return trimList(head->next);
}

Tuy nhiên hàm này chỉ xóa duy nhất 1 số 0 ở cuối và danh sách là 1 0 2 0, mình cũng bí rồi nên nhờ các bạn gợi ý giúp…

Gió viết 20:42 ngày 30/09/2018

Node* trim(Node* head){
if(head==NULL) return NULL;
if(head->next==NULL){
if(head->data==0){
free(head)
return NULL;
}else{
return head;
}
}
head->next=trim(head->next);
return head;

}

huy vo viết 20:43 ngày 30/09/2018

Code của bạn mình thử cũng chỉ xóa 1 số 0 cuối cùng thôi…

Gió viết 20:48 ngày 30/09/2018

Mình copy copy nhầm 2 dòng với nhau

#include <iostream>
using namespace std;

struct Node{
    Node *next;
    int data;
    
    Node(int data,Node* nxt){
        next=nxt;
        this->data=data;
    }
};

Node* trim(Node* head){
     if(head==NULL) return NULL;
    
     head->next=trim(head->next);
     if(head->next==NULL){
            if(head->data==0){
                 free(head);
                 return NULL;
            }else{
                 return head;
            }
     }
     return head;
}
int main() {
	Node * root=
new Node(1,new Node(0, new Node(2,
new Node(0,new Node(0,new Node(0,NULL))))));
        Node *p=trim(root);
        while(p){ cout<<p-> data; p=p->next;}
	return 0;
}

Bài liên quan
0