带头结点的单链表的逆置
2010-09-08 13:05
281 查看
代码
//带头结点的单链表逆置.cpp #include<iostream> using namespace std; struct Node{ int data; Node* next; }; void print(Node* list) //遍历带头结点的单链表 { Node* t=list->next; while(t!=NULL){ cout<<t->data<<", "; t=t->next; } } void create(Node* &l,int data[],int n) //创建带头结点的单链表l=(data[0],data[1],...,data[n-1]) { l=new Node; l->next=NULL; Node* tail=l; Node *t; for(int k=1;k<=n;k++){ t=new Node; t->data=data[k-1]; t->next=NULL; tail->next=t; tail=t; } } /*逆置算法1 void ReverseLinkList2 (Node* &L ) { // L是带头结点的单链表的头指针;p、q、r是三个辅助指针 //在扫描链表的过程中进行逆置操作 Node* p,*q,*r; if (!L->next ) return; //空表 p=L->next; q=p->next; //原表中,*p为*q的前驱 p->next=NULL; //a1的next置空指针,剥离头结点 while (q) { r=q->next ; //修改q->next之前,保存q->next到r q->next=p ; //逆置表中,*q为*p的前驱 p=q ; q=r ; //参与扫描的指针都需后移 } L->next=p; } //ReverseLinkList2 */ void ReverseList(Node* &l) { Node *p,*q,*r; p=l->next->next;q=p->next; if(p==NULL) return;//有一个元素时,直接返回 r=l->next; r->next =NULL; while(p->next!=NULL){ //每次将未逆置的链表中的首结点*p,挂在部分逆置好的链表首结点*r之前, //在改变p->next之前,将p的后继结点存储在q之中 p->next=r; r=p; p=q;q=p->next; } p->next=r; //最后一结点的处理 l->next=p; } int main() { Node* mylist; int a[]={1,2,3,4,5,6,7,8,9,10}; int size=sizeof(a)/sizeof(int); create(mylist,a,size); print(mylist); cout<<endl; ReverseList(mylist); print(mylist); return 0; }
相关文章推荐
- 带头结点的单链表就地逆置
- 6-1 带头结点的单链表就地逆置
- 不带头结点的链表操作及其逆置
- 对一个不带头结点的单链表进行逆置
- 就地逆置带头结点的单链表
- 带头结点单链表的就地逆置
- 基于链表:逆置带头结点的单链表
- 带头结点的单链表的逆置
- 带头结点的单链表就地逆置
- 带头结点的单链表就地逆置
- 带头结点的链表的逆置
- 带头结点的单链表实现就地逆置的更优方法
- PTA 带头结点的单链表就地逆置(10 分)
- 将带头结点的单链表利用原结点空间将其逆置
- 对带头结点的单链表实现就地逆置的算法分析
- 带头结点的单链表就地逆置(10 分)
- 带头结点的单链表就地逆置
- 单链表的就地逆置 (单链表带头结点)(某公司校园招聘面试试题)
- PTA(数据结构)-带头结点的单链表就地逆置
- 笔试面试单链表相关(2)在任意位置前插入结点、逆置链表