首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问关于指针做函数形参的有关问题-小妹儿

2012-06-17 
请教关于指针做函数形参的问题---小妹儿To All:背景实现链表逆序。下面是代码C/C++ codestruct Node {int d

请教关于指针做函数形参的问题---小妹儿
To All:
 背景实现链表逆序。
下面是代码

C/C++ code
struct Node {    int data;    Node *pnext;};// 创建链表 bool Creatlist(Node *head){    if(NULL == head)    {        cout<<"error"<<endl;        return 0;    } else {        int num = 0;        int count = 0;        cin>>num;        while(999 != num) //输入 999 结束        {             count++;             if(count == 1)             {                 head->data = num;             } else {                 Node *p = new Node();                 p->pnext = NULL;                 p->data = num;                 Node *temp = head;                 while(NULL != temp->pnext)                 {                     temp = temp->pnext;                 }                 temp->pnext = p;                              }             cin>>num;        }        return 1;    }}

C/C++ code
//逆序bool BackTrace(Node *head){    if(NULL == head)    {        cout<<"error"<<endl;        return 0;    } else{        int num = 0;        Node *p = head;        if(NULL == p->pnext)        {           return 1;         }else{             Node *q = head->pnext;         Node *r = NULL;         while(NULL != q)         {                 r = q->pnext;                 if(0 == num)                 {                 p->pnext = NULL;                 num++;             }                 q->pnext = p;                     p = q;             q = r;                 }                 head = p;//<-打断点发现实现了逆序,但是在执行return后 head的值就出错了。         return 1;        }            }}


C/C++ code
主函数int _tmain(int argc, _TCHAR* argv[]){        Node *head = new Node();    head->pnext = NULL;        Creatlist(head);    BackTrace(head);//--->可能是这里传值出错?但我不知道为什么?请大家解释下。。。谢谢。。}


[解决办法]
C/C++ code
主函数int _tmain(int argc, _TCHAR* argv[]){        Node *head = new Node();    head->pnext = NULL;        Creatlist(head); //改成 Creatlist(&head),函数做相应修改    BackTrace(head);--->可能是这里传值出错?但我不知道为什么?请大家解释下。。。谢谢。。}
[解决办法]
因为BackTrace函数是要改变head的值,但是参数的值在函数退出后是无效的,因此你只能用指针实现,
head是Node*,所以BackTrace的参数应该用Node**;
调用是用
BackTrack(&head);
函数里的相应改一下就好
[解决办法]
逆序链表

typedef struct tagLinkNode
{
int NodeData;
tagLinkNode * NextLineNode;
} LinkNode ;

void ReverseLink(LinkNode * & headPointer)
{
LinkNode * firstOfThreeNode;
LinkNode * secondOfThreeNode;
LinkNode * thirdOfThreeNode;

if (headPointer == NULL)
{
return;
}

firstOfThreeNode = headPointer;

if (firstOfThreeNode->NextLineNode == NULL)
{
return;
}

secondOfThreeNode = firstOfThreeNode->NextLineNode;

thirdOfThreeNode = secondOfThreeNode->NextLineNode;

while (thirdOfThreeNode != NULL)
{
secondOfThreeNode->NextLineNode = firstOfThreeNode;
firstOfThreeNode = secondOfThreeNode;
secondOfThreeNode = thirdOfThreeNode;
thirdOfThreeNode = thirdOfThreeNode->NextLineNode;
}

secondOfThreeNode->NextLineNode = firstOfThreeNode;

headPointer->NextLineNode = NULL;

headPointer = secondOfThreeNode;


}
[解决办法]

C/C++ code
int _tmain(int argc, _TCHAR* argv[]){        Node *head = new Node();    head->pnext = NULL;        Creatlist(head); //改成 Creatlist(&head),函数做相应修改    BackTrace(head);--->可能是这里传值出错?但我不知道为什么?请大家解释下。。。谢谢。。}
[解决办法]
探讨

C/C++ code

int _tmain(int argc, _TCHAR* argv[])
{
Node *head = new Node();
head->pnext = NULL;
Creatlist(head); //改成 Creatlist(&amp;head),函数做相应修改
BackTrace(head);--->可能是这里传值……

热点排行