| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 768 人关注过本帖
标题:求助:关于链表中的双指针
只看楼主 加入收藏
doudoubaobao
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-9-22
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
求助:关于链表中的双指针
本人正在研究链表,对于指针或是双重指针的区别用法不太明白
下面有两个具体的例子,希望能得到某位好心高人的点拨~
******************使用单指针后运行错误的cpp文件内容**************************
#include <iostream.h>

struct NODE
{
    int data;
    NODE *next;
};

NODE *head=NULL;
int data[6]={25,41,17,98,5,67};
void InsertList(NODE *head,int aData,int bData);
void DeleteList(NODE *head,int aData);
void OutputList(NODE *head);

void InsertList(NODE *head,int aData,int bData)
{
    NODE *p,*a,*b;
    b=(NODE*)new(NODE);
    b->data=bData;
    p=head;
    if(p==NULL)
    {
        head=b;
        b->next=NULL;
    }
    else
        if(p->data==aData)
        {
            b->next=p;
            head=b;
        }
        else
        {
            while(p->data!=aData&&p->next!=NULL)
            {
                a=p;
                p=p->next;
            }
            if(p->data==aData)
            {
                a->next=b;
                b->next=p;
            }
            else
            {
                p->next=b;
                b->next=NULL;
            }
        }
}
void OutputList(NODE *head)
{
    NODE *p=head;
    while(p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<"\n";
}
void DeleteList(NODE *head,int aData)
{
    NODE *p,*a;
    p=head;
    if(p==NULL)
        return;
    if(p->data==aData)
    {
        head=p->next;
        delete p;
    }
    else
    {
        while(p->data!=aData&&p->next!=NULL)
        {
            a=p;
            p=p->next;
        }
        if(p->data==aData)
        {
            a->next=p->next;
            delete p;
        }
    }
}
void main()
{
    for(int i=0;i<6;i++)
        InsertList(head,data[0],data[i]);
    OutputList(head);
    DeleteList(head,98);
    DeleteList(head,41);
    OutputList(head);
}
******************使用双重指针后运行正确的cpp文件内容**************************
#include <iostream.h>

struct NODE
{
    int data;
    NODE *next;
};

NODE *head=NULL;
int data[6]={25,41,17,98,5,67};
void InsertList(NODE **head,int aData,int bData);
void DeleteList(NODE **head,int aData);
void OutputList(NODE *head);

void InsertList(NODE **head,int aData,int bData)
{
    NODE *p,*a,*b;
    b=(NODE*)new(NODE);
    b->data=bData;
    p=*head;
    if(p==NULL)
    {
        *head=b;
        b->next=NULL;
    }
    else
        if(p->data==aData)
        {
            b->next=p;
            *head=b;
        }
        else
        {
            while(p->data!=aData&&p->next!=NULL)
            {
                a=p;
                p=p->next;
            }
            if(p->data==aData)
            {
                a->next=b;
                b->next=p;
            }
            else
            {
                p->next=b;
                b->next=NULL;
            }
        }
}
void OutputList(NODE *head)
{
    NODE *p=head;
    while(p!=NULL)
    {
        cout<<p->data<<" ";
        p=p->next;
    }
    cout<<"\n";
}
void DeleteList(NODE **head,int aData)
{
    NODE *p,*a;
    p=*head;
    if(p==NULL)
        return;
    if(p->data==aData)
    {
        *head=p->next;
        delete p;
    }
    else
    {
        while(p->data!=aData&&p->next!=NULL)
        {
            a=p;
            p=p->next;
        }
        if(p->data==aData)
        {
            a->next=p->next;
            delete p;
        }
    }
}
void main()
{
    for(int i=0;i<6;i++)
        InsertList(&head,data[0],data[i]);
    OutputList(head);
    DeleteList(&head,98);
    DeleteList(&head,41);
    OutputList(head);
}
*****************************************************************
区别在于子函数中的head变量,前者用的是*head,后者则是**head,为什么第一种方法是不对的?
链表范例.rar (227.23 KB)

/******附件为可编译通过的VC环境********/
搜索更多相关主题的帖子: 链表 指针 
2009-09-22 00:11
shl305
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:36
专家分:121
注 册:2009-3-13
收藏
得分:10 
insert函数传递指针实际上是复制一个指针变量,复制后的指针与原来的指针指向同一个地方,
但是在最开始head为null时,复制后的指针也为null.他们都不指向具体内存,而这时对复制后的哪个指针分配空间后,原来的head指针还是null
2009-09-22 23:06
pywepe
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:296
专家分:483
注 册:2009-4-5
收藏
得分:10 
#include <iostream.h>

c++请写

#include<iostream>

java群
62635216
欢迎加入
2009-09-23 12:39
快速回复:求助:关于链表中的双指针
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017809 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved