已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,写出算法change(p),交换p所指向的结点和它的前缀结点的顺序。

题目
已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,写出算法change(p),交换p所指向的结点和它的前缀结点的顺序。


相似考题
参考答案和解析
参考答案:
  知道双向循环链表中的一个结点,与前驱交换涉及到四个结点(p结点,前驱结点,前驱的前驱结点,后继结点)六条链。
  [算法描述]
  void Exchange(LinkedList p)
  ∥p是双向循环链表中的一个结点,本算法将p所指结点与其前驱结点交换。
  {q=p->llink;
  q->llink->rlink=p; ∥p的前驱的前驱之后继为p
  p->llink=q->llink; ∥p的前驱指向其前驱的前驱。
  q->rlink=p->rlink; ∥p的前驱的后继为p的后继。
  q->llink=p; ∥p与其前驱交换
  p->rlink->llink=q; ∥p的后继的前驱指向原p的前驱
  p->rlink=q; ∥p的后继指向其原来的前驱
  }∥算法exchange结束。
更多“已知p指向双向循环链表中的一个结点,其结点结构为data、prior、next三个域,写出算法change(p),交换p所指向的结点和它的前缀结点的顺序。 ”相关问题
  • 第1题:

    已知指针 p 指向某双向链表的一个中间结点,下列语句序列实现的操作是()。 q = p -> prior; p -> prior = q -> prior; q -> prior -> next = p; free(q);

    A.删除 p 结点

    B.删除 p 结点的直接前驱结点

    C.删除 p 结点的直接后继结点

    D.删除 p 结点及其所有后继结点


    p->prior->next == p->next->prior

  • 第2题:

    在双向链表中,在p所指向的结点前插入一个q所指向的结点,相应的操作语句是()。 注:双向链表的结点结构为(prior,data,next)。

    A.p->prior=q;q->next=p;p->prior->next=q;q->prior=q;

    B.p->prior=q;p->prior->next=q;q->next=p;q->prior=p->prior;

    C.q->next=p;q->prior=p->prior;p->prior->next=q;p->prior=q;

    D.q->prior=p->prior;q->next=q;p->prior=q;p->prior=q;


    p->prior->next=q; q->next=p; q->prior=p->prior;p->prior=q;

  • 第3题:

    (填空题)某双向链表中,结点结构为【prior,data,next】。那么删除p指针所指结点时,需要执行语句:p->next->prior=p->prior; 与 _______;free(p);


    p->next = pr->next; pr->next = p;;struct node * pTemp; pTemp = pr->next; pr->next = p; p->next = pTemp;

  • 第4题:

    某双向链表中,结点结构为【prior,data,next】。那么删除p指针所指结点时,需要执行语句:p->next->prior=p->prior; ; free(p);


    p->prior->next = p->next

  • 第5题:

    在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是()。 注:双向链表的结点结构为(prior,data,next)。

    A.p-next = q; q->prior = p; p->next->prior = q; q->next = q;

    B.p->next = q; p->next->prior = q; q->prior = p; q->next = p->next;

    C.q->prior = p; q->next = p->next; p->next->prior = q; p->next = q;

    D.q->prior =p; q->next = p->next; p->next = q; p->next->prior = q;


    s->prior=p;s->next=p->next;p->next->prior=s;p->next=s;