请教,链表倒序怎么弄?

WINDOWS_ME 2003-06-30 12:09:15
只有一个指针(公),一个数据项(私),把头变成尾,尾变成头!
拜托!
...全文
49 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
WINDOWS_ME 2003-07-02
  • 打赏
  • 举报
回复
谢谢两位。
wplian 2003-06-30
  • 打赏
  • 举报
回复
以前做的一个链表类的成员函数

// 将链表逆序存储(链表翻转)
template<class T>
void Sqlist<T>::reverse()
{
if(nLength<2) // 如果链表为空或者只有一个结点时不作翻转
return;
Node *p,*q,*r; // 构造三个临时辅助结点
p = pLast->next; // p 指向尾结点的后继结点
q = pHead->next; // q 指向第一个有效结点
r = q->next; // r 指向q的后继结点
pHead->next = pLast; // 虚头结点指向尾结点
pLast = q; // 尾结点指向第一个有效结点
for(int i=0;i<nLength;i++)
{
q->next = p; // q的后继结点改为p(后继指针指向前驱)
p = q; // 用p结点记下q结点
q = r; // q结点右移一个位置
if(i!=nLength-1) // r结点右移一个位置(最后一次不能右移)
r = r->next;
}
}
zhucde 2003-06-30
  • 打赏
  • 举报
回复
呵呵,差不多了
zhucde 2003-06-30
  • 打赏
  • 举报
回复
呵呵,差不多了
思危 2003-06-30
  • 打赏
  • 举报
回复
程序及测试:

typedef struct DATA DATA;

struct DATA
{
int nData;
DATA* pNext;
};

DATA* Invert(DATA* pHead)
{
DATA* pTmp = pHead;
DATA* pInvertHead = pHead;
DATA* pInvertNext = pHead;
while(pTmp!=NULL)
{
pInvertNext = pInvertHead;
pInvertHead = pTmp;

pTmp = pTmp->pNext;

if(pInvertHead==pHead)
{
pInvertHead->pNext = NULL;
}
else
{
pInvertHead->pNext = pInvertNext;
}
}
return pInvertHead;
}

void main(int arn, char* arv[])
{
DATA d1, d2, d3;
d1.nData = 1;
d1.pNext = &d2;
d2.nData = 2;
d2.pNext = &d3;
d3.nData = 3;
d3.pNext = NULL;
DATA* pH = &d1;
while(pH!=NULL)
{
printf("%d\n", pH->nData);
pH = pH->pNext;
}

pH = &d1;
pH = Invert(pH);

while(pH!=NULL)
{
printf("%d\n", pH->nData);
pH = pH->pNext;
}

}

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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