设用带头结点的双向循环链表表示的线性表为 L=(a1,a2, …an)。写出算法将 L 改造成:L=(a1,a3,…an,…a4,a2)

设用带头结点的双向循环链表表示的线性表为 L=(a1,a2, …an)。写出算法将 L 改造成:L=(a1,a3,…an,…a4,a2)

木来 木来

设用带头结点的双向循环链表表示的线性表为 L=(a1,a2, …an)。写出算法将 L 改造成:L=(a1,a3,…an,…a4,a2)。[华中科技大学 2007 年]

结点和结点指针类型定义如下:

typedef struct node{

ElemType data;

struct node *prior, *next;

} *DLinkList;

算法的基本思想:

依次访问数据元素 a1,a2,…an-1,将其序号为偶数的节点先删除,再插入到 an的后面。

算法的代码:

void Adjust(DLinkList L) { 
 DLinkList tail= L->prior, p= L->next;
  inti=0; 
  while(p!=tail) { 
    i++; 
    q=p->next;  
   if(i%2==0) { 
      p->prior->next=q;  
      q->prior=p->prior; 
     tail->next->prior=p; 
      p->next=tail->next; 
p->prior=tail;  
tail->next = p;  
} 
  p=q; 
  } 
}

0 条评论