关于循环链表的

CNer 2001-10-29 01:03:43
书上介绍说
在循环链表的尾部设置尾指针
能方便的连接两个循环链表
只需改动两个指针
我对此不解,我认为至少得设3个指针

[1|Next]->[2|Next]->[3|Next]<-TailA
^ |
|_______________________|


[1|Next]->[2|Next]->[3|Next]<-TailB
^ |
|______________________|


我是这么写的
p=TailA->Next;
TailA->Next=TailB->Next;
TailB->Next=p;
请大家帮我分析一下?
...全文
85 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SlaSk 2001-10-31
  • 打赏
  • 举报
回复
sevecol(看什么看...):
你这样的用法很聪明哦。。。。不过时代不同了现在不是内存紧张的时机,所以如果不是非常非常的必要,我想应该用不着,因为我也用临时变量。。。
sevecol 2001-10-30
  • 打赏
  • 举报
回复
TailA->Next=(TYPE*)((int)(TailB->Next)+(int)(TailA->Next));
TailB->Next=(TYPE*)((int)(TailA->Next)-(int)(TailB->Next));
TailA->Next=(TYPE*)((int)(TailA->Next)-(int)(TailB->Next));
只用了两个指针呀
CNer 2001-10-30
  • 打赏
  • 举报
回复
我的那本书是《数据结构c语言版》
清华的。
大家都看过的吗?
书上没写错吧?
huanshilang 2001-10-30
  • 打赏
  • 举报
回复
书上没错,你仔细、体会体会。
北极猩猩 2001-10-29
  • 打赏
  • 举报
回复
呵呵,书上写得也没错,你的确只修改了两个指针(链表上的),p不过是个临时变量。
xiterator 2001-10-29
  • 打赏
  • 举报
回复
实际上,只需要改变二条边的某一端点:

p=TailA->Next; //Buffer 没有改变Tail->next
TailA->Next=TailB->Next; //改变边TailA->next
TailB->Next=p; //改变边TailB->next


若是不带头结点的:可以采用对接
if ( TailA && TailB )
{
TailA->next->next= TailB->next;
TailB->next= TailA;
}
return TailB? TailB: TailA;

sevecol 2001-10-29
  • 打赏
  • 举报
回复
忘了加括号了
TailA->Next=(TYPE*)((int)(TailB->Next)+(int)(TailA->Next));
TailB->Next=(TYPE*)((int)(TailA->Next)-(int)(TailB->Next));
TailA->Next=(TYPE*)((int)(TailA->Next)-(int)(TailB->Next));
sevecol 2001-10-29
  • 打赏
  • 举报
回复
p=TailA->Next;
TailA->Next=TailB->Next;
TailB->Next=p;
你是在交换两个指针,其实你可以这样做
TailA->Next=(TYPE*)((int)TailB->Next+(int)TailA->Next);
TailB->Next=(TYPE*)((int)TailA->Next-(int)TailB->Next);
TailA->Next=(TYPE*)((int)TailA->Next-(int)TailB->Next);
当然这样做很不自然,还是你的方法好

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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