链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
2012-09-27 11:50
337 查看
链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
struct DNode { DNode *pre; DNode *next; int data; }; typedef DNode* DNodeTree;
////////////////////////////////////////////////////////////////////////// //交换临近节点 DNode *Exchange1(DNode *head,DNodeTree &p1,DNodeTree &p2) //假定p1在前,p2在后, { // DNode *p1_pre,*p1_next,*p2_pre,*p2_next; // p1_pre=p1->pre; // p1_next=p1->next; // p2_pre=p2->pre; // p2_next=p2->next; // // p1_pre->next=p2; // p1_next->pre=p2; // p2_pre->next=p1; // p2_next->pre=p1; // // p1->next=p2_next; // p1->pre=p2_pre; // // p2->next=p1_next; // p2->pre=p1_pre;zai// //这里只根据题中的要求,所以没有考虑当节点不相邻的情况 if (p2->next==NULL) { p2->pre=p1->pre; p1->next=p2->next; p1->pre->next=p2; p2->next=p1; p1->pre=p2; } else { p1->next=p2->next; p2->pre=p1->pre; p1->pre->next=p2; p2->next->pre=p1; p2->next=p1; p1->pre=p2; } p1=p2; //交换位置 p2=p1->next; return head; } DNode *Exchange_Near_Node(DNode *head) { DNode *p,*p1,*p2; p1=head; p2=head; p=head->next; int temp=0; while(p) //从头结点的下一个计算,头结点不算一个节点 { temp++; p=p->next; } p1=p1->next; p2=p2->next->next; if(temp%2!=0) //节点个数为奇数 { while ((temp=temp/2)!=0) { head=Exchange1(head,p1,p2); p1=p1->next->next; //每次交换后,向后推进两个 p2=p2->next->next; } } else//节点个数为偶数 { do{ head=Exchange1(head,p1,p2); if (p2->next==NULL) { break; } p1=p1->next->next; p2=p2->next->next; }while ((temp=temp/2)!=0); } return head; }
相关文章推荐
- 链表相邻元素翻转,如1->2->3->4->5->6-7,翻转后变为:2->1->4->3->6->5->7。
- 链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
- 链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
- 链表相邻元素翻转,如a->b->c->d->e->f-g,翻转后变为:b->a->d->c->f->e->g
- 链表相邻元素翻转
- 链表相邻元素翻转
- 链表相邻元素翻转
- 链表相邻元素翻转
- 链表相邻元素翻转
- 链表相邻元素翻转
- 算法 链表相邻元素翻转
- 链表相邻元素翻转
- 链表的相邻元素的翻转
- C++循环链表中进行元素的翻转
- 删除链表中相邻重复元素
- CSS相邻选择器(>)选择子元素而不包含该子元素的子元素,及如何让DIV中的内容垂直居中
- 链表:调换相邻元素
- C++循环链表中进行元素的翻转
- [2014美团网笔试]给定一个单链表和一个整数k,要求每隔k个元素翻转链表
- C++循环链表中进行元素的翻转