[20230830]试写一算法,将一条带头结点的双向循环链表逆置。

[20230830]试写一算法,将一条带头结点的双向循环链表
逆置。
//双向循环链表的类型定义为:
typedef char ElemType;
typedef struct DuLNode {
ElemType data;
struct DuLNode *prior, *next; //分别指向直接
前驱和直接后继
} DuLNode, *DuLinkList; //双向链表
typedef DuL inkList DuCirlinklist; //双向循环链表
实现下列函数:
void reverseDuCirL inkList(DuCirLinkList L)
//请将双向循环链表L逆置

 

#include "allinclude.h"  //DO NOT edit this line
void reverseDuCirLinkList(DuCirLinkList L)
{   // Add your code here
if(L!=NULL)
{
int h,i;
  DuLNode* p=NULL;
  DuLNode* t=NULL;
  ElemType e;
  p=L->next;
  for(h=0;p!=L;p=p->next)
  {
    h++;
    if(p->next==NULL)
    {
        break;
    }
  }  
  t=p->prior;
  if(p!=NULL)
  {
    for(i=1,p=L->next;/*p!=t||*/i<=(h)/2;p=p->next,t=t->prior,i++)
  {
    e=p->data;
    p->data=t->data;
    t->data=e;
  }
  }
}
  


}


注意是双向循环链表,在遍历整个链表时,不能写p!=NULL,而是写成p!=L,
用for循环查看链表有多少个元素时 有头结点的时候 开始要设为p=L-》next 这样数出来就刚好为L中元素个数  若设为p=L,最后数出来会多一个
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值