zenghonghao 2015-12-05 15:26 采纳率: 36.4%
浏览 2250
已采纳

c++关于数组指针赋值问题

这段赋值语句

下面这段语句是错的
void setArc(char start, char end)
{
int i;
for(i=0;i<Vexnum;i++)
{

        if(vex[i].ch == start)
        {
            while(vex[i].next)
            {
                vex[i] = *vex[i].next;
            }
            ArcNode *nNode = new ArcNode;
            nNode->ch = end;
            vex[i].next = nNode;
        }
    }
}

我改了一下,变成下面这段语句,为什么执行不会出问题?
void setArc(char start, char end)
{
    int i;
    for(i=0;i<Vexnum;i++)
    {

        if(vex[i].ch == start)
        {
            ArcNode *thisnode = &vex[i];
            while(thisnode->next)
            {
                thisnode = thisnode->next;
            }
            ArcNode *nNode = new ArcNode;
            nNode->ch = end;
            thisnode->next = nNode;
        }
    }
}

源代码
#include<iostream>

using namespace std;
#define Max 100
class ArcNode{
public:
ArcNode *next;
char ch;
ArcNode()
{
next = NULL;

}

};
class List{
private:
int Bownum;
int Vexnum;
ArcNode *vex;
public:
List(int n, int k)
{
Vexnum = n;
Bownum = k;
vex = new ArcNode[Vexnum];
ArcNode *spare = new ArcNode();
int i;
for(i=0;i<n;i++)
vex[i].ch = 'A'+i;
}
void setArc(char start, char end)
{
int i;
for(i=0;i<Vexnum;i++)
{

        if(vex[i].ch == start)
        {
            ArcNode *thisnode = &vex[i];
            while(thisnode->next)
            {
                thisnode = thisnode->next;
            }
            ArcNode *nNode = new ArcNode;
            nNode->ch = end;
            thisnode->next = nNode;
        }
    }
}
void display()
{
    int i;
    for(i=0;i<Vexnum;i++)
    {
        cout<<i<<' ';
        cout<<vex[i].ch<<'-';
        ArcNode *tNode = &vex[i];
        tNode = tNode->next;
        while(tNode)
        {
            cout<<tNode->ch-'A'<<'-';
            tNode = tNode->next;
        }
        cout<<'^'<<endl;
    }
}

};
int main()
{

int t;
cin>>t;
while(t--)
{
int n, k;
cin>>n>>k;
List mylist(n, k);
while(k--)
{
char ch1, ch2;
cin>>ch1>>ch2;
mylist.setArc(ch1, ch2);

    }
    mylist.display();
}
return 0;

}

  • 写回答

4条回答 默认 最新

  • ysuwood 2015-12-06 00:18
    关注

    数组vex是存放了各个链表的头节点吧,那么在循环中vex[i] = *vex[i].next;,就把头结点的next变为结尾了,
    破坏了链表。
    第二种用的是临时指针,则不会破坏链表结构。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元