删除链表中数据为DATA的所有节点(无头节点)

#include <iostream>
using namespace std;
struct Node{
    
int data;
    Node
* next;
    Node(
const int& t=int()):data(t),next(NULL){}
}
;
Node
* del_node(Node* head,int DATA){
    
if(head==NULL)
        
return head;
    
while(head&&head->data==DATA){
        Node
* hp=head->next;
        delete head;
        head
=hp;
    }

    
if(head==NULL)
        
return head;

    Node
* q=head->next;
    Node
* p=head;
    
while(q!=NULL){
        
if(q->data!=DATA){
            p
=p->next;
            q
=q->next;
        }

        
else{
            Node
* tmp=q;
            p
->next=q->next;
            q
=q->next;
            delete tmp;
        }

    }

    
return head;
}


int main()
{
    Node
* head=NULL;
    
int tmp;
    cout
<<"请输入来建立链表:";
    
do{//建立一个<无头结点>的链表
        cin>>tmp;
        Node
* p=new Node(tmp);
        p
->next=head;
        head
=p;
    }
while(cin.get()!='\n');
    cout
<<"建立的链表如下:"<<endl;
    Node
* p=head;
    
while(p!=NULL){
        cout
<<p->data<<' ';
        p
=p->next;
    }

    cout
<<endl;
    cout
<<"请输入要删除的节点:";
    
int x;
    cin
>>x;
    head
=del_node(head,x);
    cout
<<"删除后的链表如下:"<<endl;
    p
=head;
    
while(p!=NULL){
        cout
<<p->data<<' ';
        p
=p->next;
    }

    cout
<<endl;    
    p
=head;
    
while(p!=NULL){    
        p
=head->next;
        delete head;
        head
=p;
    }

    system(
"pause");
    
return 0;
}

posted on 2011-06-07 17:10 Hsssssss 阅读(112) 评论(0)  编辑 收藏 引用 所属分类: C++代码


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿

文章分类

文章档案

收藏夹

搜索

最新评论