打印

学习C语言,对指针一直不太明白,请各位前辈给指点一下!

[复制链接]
1996|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ccjgalaxy|  楼主 | 2009-8-25 10:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ccjgalaxy 于 2009-8-25 10:59 编辑

下面是一个链表的插入函数
#include <stdio.h>
  #include <stdlib.h>
  struct Node{
  int data;//数据域
  Node * next;//指针域
  };
  /**************************************************************************************
  *函数名称:insert
  *函数功能:在连表中插入元素.
  *输入:root 链表头指针,idx新元素插入位置,d 新元素中的数据域内容
  *输出:无
  *************************************************************************************/
  void insert(Node * root,int idx,int d){
  Node * tmp = root;
  for(int i = 0;i<idx;i++){       //主要是这个问题, 这里为什么要采用循环?
  tmp = tmp->next;
  if(tmp == NULL) return ;
  }
  Node * tmp2 = new Node;
  tmp2->data = d;
  tmp2->next = tmp->next;//既然已经把temp->next 已经赋值给了tmp2->next;
  tmp->next = tmp2;           //为什么还要将temp2在赋值给tmp->next ?
  }

相关帖子

沙发
lanmp| | 2009-8-25 12:17 | 只看该作者
1,这里是为了找到插入的位置,不用循环还能用什么?
2,这两句一个连接后面的,一个连接前面的,少一个都不行。

使用特权

评论回复
板凳
古道热肠| | 2009-8-25 12:26 | 只看该作者
答1:用循环查找元素是典型做法,指针通常只用赋值操作,加和减和比较操作,这种链表指针地址又不连续,是不能直接加和减的.链接表操作就用这种书上介绍的方法吧,俺是没有捷径了,大家说说吧.

使用特权

评论回复
地板
ccjgalaxy|  楼主 | 2009-8-25 17:34 | 只看该作者
插入位置不是已经指定了吗?idx为新元素插入位置,那就直接插入就行了,还用找吗?
是不是因为只有链表的第一个节点是已知的,所以才要查找啊?

使用特权

评论回复
5
lanmp| | 2009-8-25 17:40 | 只看该作者
链表不是数组,地址不一定连续,只能从前一个找下一个,这样一直找下去。

使用特权

评论回复
6
ccjgalaxy|  楼主 | 2009-8-26 08:49 | 只看该作者
谢谢,非常感谢!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

37

帖子

0

粉丝