数据结构 单链表的就地转置

来源:互联网 发布:网络服务费增值税税率 编辑:程序博客网 时间:2024/04/28 21:56
#include <stdio.h>#include <stdlib.h>#include <iostream.h>#define OVERFLOW    -2typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode, *LinkList;void CreateList_L(LinkList &L, int n){int i;LinkList p,q;L = (LinkList) malloc (sizeof(LNode));if (!L){exit(OVERFLOW);}p = L;for (i=0; i<n; i++){q = (LinkList) malloc (sizeof(LNode));if (!q){exit(OVERFLOW);}scanf("%d",&q->data);p->next = q;p = q;}p->next = NULL;}void Display(LinkList L){LinkList p = L->next;while (p != NULL){printf("%d ",p->data);p = p->next;}printf("\n");}void reverseList(LinkList &L){/*单链表的就地转置,L->1->2->3->4->5->NULL变成L->5->4->3->3->1->NULL  设置两个指针p,q,p = L->next, q = L->next,q = q->next,将第一个元素的后继变为空 p->next = NULL,然后p = q;  */     LinkList p = L->next,q = L->next;q = q->next;//q指向第二个元素p->next = NULL;//第一个元素变成最后一个元素p = q;//处理后面的元素while (p != NULL){q = q->next;p->next = L->next;L->next = p;p = q;}}int main(){int n;LinkList L;printf("请输入您要创建单链表的元素的个数:");scanf("%d",&n);CreateList_L(L,n);Display(L);reverseList(L);Display(L);return 0;}

0 0
原创粉丝点击