小白算法积累——单链表11#带头结点单链表 +分解+逆序

题目:设C={a1,b1,a2,b2,…an,bn}为线性表,采用带头结点的hc单链表存放,
设计一个就地算法,将其拆分为两个线性表,
使得A={a1,a2,…an},B={bn,bn-1,…b2,b1}
关键字:带头结点单链表 +分解+逆序

思路1
采用第10题的思路,借助访问序号小助手

思路2
不使用序号小助手
while循环中的代码改为将结点插入到表A中并将下一个结点插入到B中,
然后逐步循环这个操作,one for A,one for B ||one for A,one for B ||…

另外,由于B是逆置,所以使用头插法
需要变量:
A,B表头结点指针:A,B
A表(旧表)的工作指针p,尾指针ra (执行尾插法),后继指针q(防断链)

LinkList DisCreat_2(LinkList & A){
  LinkList B=(LinkList)malloc(sizeof(LNode));//创建B表表头
  B->next=NULL;//初始化B表
  LNode*p=A->next,*q;//p为工作指针,q为
  LNode*ra=A;//ra为表尾指针,始终指向A的尾结点
  while(p!=NULL){
    ra->next=p;ra=p;//ra作为尾指针,负责将每次断裂的A表链接会去
    p=p->next;//p遍历原来A表
    if(p!=NULL)
      q=p->next;//q是原来A表中的后继结点,负责防止断链,这一步必须在把当前结点链给B表之前做
    p->next=B->next;//头插法构造B表
    B->next=p;//
    p=q;//p回到A表
  }
 ra->next=NULL;//rb->next=NULL可以省略,因为B表是头插法,一开始的b1已经设置了指向null
 return B;
 }
      
      


  
  }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值