C++链表问题

链表代码如下:
node* creat_list_end()
{
node *head,*end;
head=new node;
head->next=NULL;
end=NULL;
string data;
cout<<"shuru"<<endl;
cin>>data;
int L=data.length();
int i=0;
while(i<L&&data[i]!='\0')
{

node *s;
s=new node;
s->data=data[i];
if (head->next==NULL)
{
head->next=s;
}
else
{
end->next=s;
}
end=s;
i++;
}
if (end->next!=NULL)
{
end->next=NULL;
}
return head; //返回头节点
}
//打印链表
void print_list(node *head)
{
node *ptr;
ptr=head->next;
while (ptr->next!=NULL)
{
cout<<ptr->data;
ptr=ptr->next;
}
if (ptr->next==NULL)
{
cout<<ptr->data;
}
cout<<endl;
}
//测长
int get_list_length(node*head)
{
node *ptr;
ptr=head;
int i=0;
while(ptr->next!=NULL)
{
ptr->next=ptr->next->next;
i++;
}
return i;
}
//删除第i个节点
node *delete_i_node(node *head,int i)
{
node *ptr;
ptr=head->next;
int j=0;
//int length=get_list_length(head);
//if (i<length)
if (i==0)
{
head->next=ptr->next;
return head;
}
else
{
for (j=0;j<i-1;) //i>=1
{
ptr=ptr->next;
j++;
}
ptr->next=ptr->next->next;
return head;
}

}

void main()
{
node *list2=creat_list_end();
print_list(list2);
node *list3=delete_i_node(list2,0);
print_list(list3);
}
为什么运行了求链表长度函数之后就报错,最后main()函数里面调用的是
node *list3=delete_i_node(list2,2);而不是node *list3=delete_i_node(list2,0);

get_list_length函数里ptr->next=ptr->next->next这一句把列表结构都改了吧,你想写的应该是ptr=ptr->next吧。追问

你是对的,是不是定义了指针ptr,那么只能对指针ptr的指向进行修改,不能对
指针ptr->next乱动啊?

追答

ptr->next是节点的一个属性,对它的改动是对链表里存储的节点进行改动。理解这个就行了。想改当然可以改。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-08-19
此条已失效!

c++ MFC 里的链表问题(内详)
链表是一种数据结构,就像是一个一个的珠子串起来的链子,每个珠子就是一个结构体变量(当然这是C语言中的说法,要是是C++的话,每个珠子就是一个对象了),这种数据结构可以很方便地的访问每个元素,一般它是与数组相对的,数组是串行的,按照索引来访问元素,而链表是靠结构体中存储的下一个元素的...

c++ 链表,,求指导,程序崩溃,line:1044
1.链表的最后一个节点的next的值,是否设置为NULL了,如果没有设置,到了最后一个节点的时候,就会出现崩溃.2.你的链表中的每个节点的next值,是否都对了,如果有任一个节点的next没有指向有用的节点的话,就会访问不被允许访问的内存,导致崩溃.3.考虑下在进入循环的第一次是否就有问题,因为循环里,并没...

c++ 链表,,求指导,程序崩溃,line:1044
链表的最后一个节点的next的值,是否设置为NULL了,如果没有设置,到了最后一个节点的时候,就会出现崩溃.你的链表中的每个节点的next值,是否都对了,如果有任一个节点的next没有指向有用的节点的话,就会访问不被允许访问的内存,导致崩溃.考虑下在进入循环的第一次是否就有问题,因为循环里,并没有判断p...

c++ 链表 删除各种情况节点问题。。。求教。。在线等。。。
一、结尾节点无法删除的问题,你可以想象一个只有三个节点的链表,结尾节点的ID=findid,开始时,p指向第二个节点,然后执行到第一个if时,由于p->next->ID==findid,于是执行第二个if语句,但是此时p->next->next是等于NULL的,所以删除节点的代码没被执行。二、当只有一个结点时,因为一开始定义...

c++链表栈问题
1.建立抽象模型,说起来这件事得追溯到C++本身的结构上:从广义上看,类是一个数据操作集合体,即使数据结构也不外乎如是。那么我们必须知道栈需要什么——这是一切问题的起点。数据结构是数据模型的实现,围绕数据为中心,操作为主要手段的语义模型。真正具体化到C++的类中,我们就是要确定储存结构(...

C++单链线性表的初始化问题
L->next=p; \/\/ █ 代表节点 <--- 代表指针 你那个程序指针是这样指的 █ <-- █ <-- █ <--- █for循环一结束就指向最后面的节点了 这样L是往后移动的, 所以输出时倒着输出 L-next存储p上次创建的节点的地址 p是后来创建的节点 所以后面节点总是指向前面的节点 ...

c++链表问题
还是 [25 | ]--->[ ? | ? ]?问号代表不知道 答:S->link的值发生改变,指向了一个新的内存区域。如果r=s->link会是什么样的结构?答:链表的结构就是图中所示了,r就是S的指针域指向的下一个节点。提示:r的指针域不为NULL,不能作为链表的尾节点哦,要给r->link=NULL;...

C++双链表中(p—>left)—>right=p=(p—>right)—>left这个代表什么意 ...
假设链表如下:A<->P<->B (P->left)就是A,所以(P->left)->right就是A的右结点=P,同理(p->right)->left就是说B的左节点=P。这个语句只是让我们更加理解双向链表的含义。

C++ 动态链表.exe 中的 0x0017156a 处未处理的异常: 0xC0000005: 读取...
这个异常是内存读写异常,简单的说就是访问了不该访问的内存譬如如下c++代码 (int *) 0 = 0;马上就会引发这个异常。你要自己检测自己的指针操作的代码。一般都是因为指针操作不当造成的。 学链表的时候经常碰到这个错误。

c++单链表的遍历与长度计算,求这题的代码
struct node { int data;struct node *next;} ;创建单链表后,最后一个结点的next是NULL,据此来遍历表,获得长度。void get_len( struct node *head ){ struct node *p=head->next ;int len=0;while ( p ){ len++;p=p->next;} head->data=len ; \/\/存储长度到头结点 } ...

相似回答