莲理枝99 2022-10-09 17:18 采纳率: 100%
浏览 406
已结题

数据结构 设计一个算法,通过一趟遍历,将链表中所有结点的链接方向逆转,且仍利用原表的存储空间。

#include<iostream>
 using namespace std;
 typedef struct Lnode{
  int data;
  struct Lnode *next;
 }Lnode,*Linklist;
 int initlist(Linklist &L)
 {
  L=new Lnode;
  L->next=NULL;
  return 1;
 }
void creatlist(Linklist &L,int n)
{
 int i=0;
 Lnode *p;
 L=new Lnode;
 L->next=NULL;
 for(i=0;i<n;++i)
 {
  p=new Lnode;
  cin>>p->data;
  p->next=L->next;
  L->next=p;
 }
}
int print(Linklist L)
{
 Lnode *p;
 p=L->next;
 while(p!=0)
 {
  cout<<p->data;
  p=p->next;
 }
 cout<<endl;
}
void mergelist(Linklist &La,Linklist &Lb,Linklist &Lc)
{
 
 Lnode *pa,*pb,*tmp;
 pa=La->next;
 pb=Lb->next;
 Lc=La;
 Lc->next=NULL;
 while(pa&&pb)
 {
  if(pa->data<=pb->data)
  {
   tmp=pa->next;
   pa->next=Lc->next;
   Lc->next=pa;
   pa=tmp;
  }
  else
  {
   tmp=pb->next;
   pb->next=Lc->next;
   Lc->next=pb;
   pb=tmp;
  }
 }
 while(pa)
 {
     tmp=pa->next;
   pa->next=Lc->next;
   Lc->next=pa;
   pa=tmp;
 }
 while(pb)
 {
     tmp=pb->next;
   pb->next=Lc->next;
   Lc->next=pb;
   pb=tmp;
 }
 delete Lb;
}

void mergelist_L(Linklist &La, Linklist &Lb, Linklist &Lc)
{
   
 
 Lnode *pa,*pb,*pc;
 pa=La->next;
 pb=Lb->next;
 Lc=La;
 pc=Lc;
 while(pa&&pb)
 {
  if(pa->data<=pb->data)
  {
   pc->next=pa;
   pc=pa;
   pa=pa->next;
  }
  else
  {
   pc->next=pb;
   pc=pb;
   pb=pb->next;
  }
 }
 pc->next=pa?pa:pb;
 delete Lb;
}
int max(Linklist L)
{
    if(L->next==0){
        cout<<"结果为空:";
    
    }
    
    Lnode *max,*p;
    max=L->next;
    p=L->next->next;
    while(p)
    {
        if(p->data>max->data)
        max=p;
        p=p->next;
    }
    return max->data;
    }

void reverse(Linklist &L)
{
    Lnode *p;
    p=L->next;
    L->next=NULL;
    while(p)
    {
        Lnode *q;
        q=p->next;
        p->next=L->next;
        L->next=p;
        p=q;
    }
}
int main()
{
    int a;
 Linklist L1,L2,L3,L4,L5,L6;
 initlist(L1);
 initlist(L2);
 creatlist(L1,4);
 creatlist(L2,6);
 cout<<"链表1:";
 print(L1);
 cout<<"链表2:";
 print(L2);
 mergelist(L1,L2,L3);
 cout<<"非递增链表3:";
 print(L3);
 initlist(L4);
 initlist(L5);
 creatlist(L4,4);
 creatlist(L5,6);
 cout<<"链表4:";
 print(L4);
 cout<<"链表5:";
 print(L5);
 cout<<"非递减链表6:";
 mergelist_L(L4,L5,L6);
 print(L6);
 initlist(L1);
 initlist(L2);
 creatlist(L1,4);
 creatlist(L2,6);
 a = max(L1);
 cout<<"链表1中最大结点 :"<<a;
 a = max(L2);
 cout<<"链表2中最大结点 :"<<a;
 initlist(L1);
 creatlist(L1,4);
 reverse(L1);
 print(L1);
 return 0;
}

为什么我将单链表翻转,得不到正确的翻转结果
求专家解答ლ(′◉❥◉`ლ)

  • 写回答

2条回答 默认 最新

  • 日向晚,声声慢 2022-10-15 11:09
    关注

    你可以看下我博客中的单链表操作,还有其他复杂操作希望对你有用

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月24日
  • 已采纳回答 10月16日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题
  • ¥15 我想在WPF的Model Code中获取ViewModel Code中的一个参数
  • ¥15 arcgis处理土地利用道路 建筑 林地分类
  • ¥20 使用visual studio 工具用C++语音,调用openslsx库读取excel文件的sheet问题
  • ¥100 寻会做云闪付tn转h5支付链接的技术
  • ¥15 DockerSwarm跨节点无法访问问题
  • ¥15 使用dify通过OpenAI 的API keys添加OpenAI模型时报了“Connection Error”错误
  • ¥40 想找个软件,但我不知道怎么找到它,我甚至不知道有没有
  • ¥15 怎么把60秒的视频时长改成显示0秒?且视频内容没有任何变化的正常播放?目的是为了解决一些平台对视频时长的要求,最好有自动处理的工具!