关于链表的问题,求助,急,谢!

zhouhong0801 2006-10-04 09:42:06
有如下一个结构体的定义:
struct node
{
int var;
node *next;
};
node *n1;

那n1->next的取值是什么???

以下代码又有什么意思:
node *tmp = n1->next;
n1->next = n1->next->next;
delete tmp;
这里为什么要用tmp?直接n1->next = n1->next->next;,不是可以少分配资源嘛?
...全文
228 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dugowe 2006-10-05
  • 打赏
  • 举报
回复
楼上解释的很清楚了.
ctu_85 2006-10-04
  • 打赏
  • 举报
回复
(1)
有如下一个结构体的定义:
struct node
{
int var;
node *next;
};
node *n1;

那n1->next的取值是什么???
n1->next一般是一个指针,它指向下一个node单元

(2)
以下代码又有什么意思:
node *tmp = n1->next;
n1->next = n1->next->next;
delete tmp;
这里为什么要用tmp?直接n1->next = n1->next->next;,不是可以少分配资源嘛?
tmp是中间变量,这个是软件工程规范之一

直接n1->next = n1->next->next;,不是可以少分配资源嘛?

如果按照你说的那样,n1->next = n1->next->next后原先n1->next变成了无用单元,又怎么free呢?
这里n1->next = n1->next->next是为后面的free做铺垫的
lj860603 2006-10-04
  • 打赏
  • 举报
回复
node *tmp = n1->next;
n1->next = n1->next->next;

n1应该是带头结点的链表,那么:node *tmp = n1->next; //这样就把tmp指向了链表n1的第一个结点了(即头结点后的紧跟的那个结点)。

n1->next = n1->next->next; //这句就是把n1所在结点和n1后的第二个结点连接。就是说,把本来n1的下个结点给漏去了;

delete tmp;//这句就是释放n1下个结点的空间
lj860603 2006-10-04
  • 打赏
  • 举报
回复
那n1->next的取值是什么???
===============
没有初始化它的值就是未定义的。
SORRY,前面还有个地方没改:
typedef struct node
{
int var;
struct node *next; //这里也得改
}node;
lj860603 2006-10-04
  • 打赏
  • 举报
回复
struct node
{
int var;
node *next;
};
node *n1;
===============
这样?应该是这样吧:
typedef struct node
{
int var;
node *next;
}node;
node *n1;

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧