请问关于指针做函数形参的有关问题-小妹儿
请教关于指针做函数形参的问题---小妹儿
To All:
背景实现链表逆序。
下面是代码
------解决方案--------------------
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;