加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

设以带头结点的双向循环链表表示的线性

(2011-05-25 00:55:35)
标签:

杂谈

分类: 数据结构

2.37④  设以带头结点的双向循环链表表示的线性
表L=(a1,a2,...,an)。试写一时间复杂度为O(n)的
算法,将L改造为L=(a1,a3,...,an,...,a4,a2)。

实现下列函数:
void ReverseEven(BiLinkList &L);

双向循环链表类型定义如下:
typedef struct BiNode {
    ElemType       data;
    int            freq; // 2.38题用
    struct BiNode *prev,
                  *next;
} BiNode, *BiLinkList;

 

void ReverseEven(BiLinkList &L)
{
  struct BiNode *p,*q,*s,*t;
  p=L->next;
  s=p->next;
  q=s->next;
  t=L->prev;  
  if(q==L);
  else
  {
    if(q==t)
    {
      p->next=q;
      q->prev=p;
      s->next=t->next;
      s->prev=t;
      t->next->prev=s;
      t->next=s;
   
    else 
    {
      while(s!=t&&p!=t)
      {
        p->next=q;
        q->prev=p;
        s->next=t->next;
        s->prev=t;
        t->next->prev=s;
        t->next=s;
        p=q;
        s=q->next;
        q=q->next->next;
      }
    }
  }
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有