| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 796 人关注过本帖
标题:链表问题
只看楼主 加入收藏
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
 问题点数:0 回复次数:10 
链表问题
请问在一个单向链表里怎么样做,才能把这个链表的数据从后往前输出呢?
搜索更多相关主题的帖子: 链表 
2006-05-29 19:17
ooooo
Rank: 1
等 级:新手上路
威 望:1
帖 子:135
专家分:0
注 册:2005-6-24
收藏
得分:0 

void oppsite(part *dest)
{

if(dest->next==0)
cout<<dest->data<<' ';
else
{
oppsite(dest->next);
cout<<dest->data<<' ';
}

}
dest是指向链表第一个接点的指针


2006-05-29 19:30
lw8484654
Rank: 1
等 级:新手上路
帖 子:223
专家分:0
注 册:2005-12-1
收藏
得分:0 

用递归做有一个问题,因为链表的第一个节点是头节点,他没有数据,所以打印出来的数据是系统给的.就是说我输入10个数,打印了11个数,有什么办法解决吗?

2006-05-30 09:44
ooooo
Rank: 1
等 级:新手上路
威 望:1
帖 子:135
专家分:0
注 册:2005-6-24
收藏
得分:0 
实参传递时应该将指向链表第一个存在有效数据接点的指针
传递给调用函数

2006-05-30 10:16
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

比如part *dest是你的头结点,你只需要part *newPart=dest;
然后newPart=newPart->next;这时newPart指向的就是非头结点的第一个结点。可以做为参数传递了


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-05-30 11:54
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 
写个双向链表不就行啦!

奋斗改变一切!!
2006-05-30 20:26
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
收藏
得分:0 
最好是用双向链表,对于单向的链表,无论你是否用递归,最后都是把所有的节点都重新在内存里存了一遍。十分浪费内存和时间。

http://myajax95./
2006-06-01 10:16
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 
支持版主!!

奋斗改变一切!!
2006-06-01 20:35
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
恩??
我不是回你一个双向链表帖了么
没看么

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-06-01 20:51
独角龙
Rank: 1
等 级:新手上路
帖 子:221
专家分:0
注 册:2006-5-5
收藏
得分:0 

发个咱自己的!
注释写的不好,不好意思啊
#include <stdio.h>
#include <malloc.h>

typedef struct node
{
int item;
struct node *prior, *next;
}*dLinkList, dListNode;

void CreateList(dLinkList *headPtr, dLinkList *tailPtr);//创建链表
void InsertElem(dLinkList *headPtr, dLinkList *tailPtr, int index, int newitem);//插入结点
int DeleteElem(dLinkList *headPtr, dLinkList *tailPtr, int index);//删除结点
void VisitList(dLinkList headPtr, dLinkList tailPtr);//遍力链表
void DestroyList(dLinkList *headPtr, dLinkList *tailPtr);//销毁链表

int main(void)
{
int delitem;
dLinkList newhead = NULL, newtail = NULL;

CreateList(&newhead, &newtail);
VisitList(newhead, newtail);

InsertElem(&newhead, &newtail, 4, 29);
VisitList(newhead, newtail);

delitem = DeleteElem(&newhead, &newtail, 2);
VisitList(newhead, newtail);
printf("delete item = %d\n", delitem);

DestroyList(&newhead, &newtail);

return 0;
}

void CreateList(dLinkList *headPtr, dLinkList *tailPtr)
{
int newitem;
dLinkList newPtr;
printf("Enter one number:\n");
scanf("%d", &newitem);
while (newitem != 0)
{
newPtr = (dLinkList)malloc(sizeof(dListNode));
if (newPtr == NULL)
{
exit(1);
}

newPtr -> item = newitem;
newPtr -> next = NULL;
newPtr -> prior = NULL;

if (*headPtr == NULL)
{
newPtr -> next = *headPtr;
newPtr -> prior = *headPtr;
*headPtr = newPtr;
}

else
{
(*tailPtr) -> next = newPtr;
newPtr -> prior = *tailPtr;
}

newPtr -> next = NULL;
*tailPtr = newPtr;

printf("Enter one number:\n");
scanf("%d", &newitem);
}
}

void VisitList(dLinkList headPtr, dLinkList tailPtr)//逆序
{
while (tailPtr != NULL)
{
printf("%d ", tailPtr -> item);
tailPtr = tailPtr -> prior;
}
printf("\n");
}

void DestroyList(dLinkList *headPtr, dLinkList *tailPtr)
{
dLinkList temp;
while (*headPtr != NULL)
{
temp = *headPtr;
*headPtr = (*headPtr) -> next;
free(temp);
}

*headPtr = NULL;
*tailPtr = NULL;
}

void InsertElem(dLinkList *headPtr, dLinkList *tailPtr, int index, int newitem)
{
int pos = 0;
dLinkList newPtr, cur = NULL;

cur = *headPtr;
newPtr = (dLinkList)malloc(sizeof(dListNode));
if (newPtr == NULL)
{
exit(1);
}
newPtr -> item = newitem;

while (cur && pos < index)
{
cur = cur -> next;
pos ++;
}
newPtr -> next = cur;
newPtr -> prior = cur -> prior;
cur -> prior -> next = newPtr;
cur -> prior = newPtr;
}

int DeleteElem(dLinkList *headPtr, dLinkList *tailPtr, int index)
{
int pos = 0, delitem;
dLinkList cur;
cur = *headPtr;

while (cur && pos < index)
{
cur = cur -> next;
pos ++;
}

delitem = cur -> item;

cur -> prior -> next = cur -> next;
cur -> next -> prior = cur -> prior;


free(cur);

cur = NULL;

return delitem;
}





[此贴子已经被作者于2006-6-1 21:23:46编辑过]


奋斗改变一切!!
2006-06-01 21:22
快速回复:链表问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028135 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved