1 线性表 单链表逆置 //已知单链表H,写一个算法将其逆置 //H->head->32->63->18->50->26->NULL #include #include typedef struct node { char data; //data 为结点数据信息 struct node *next; //next 为指向后继结点的指针 }LNode; //单链表数据类型 LNode *CreateLinkList() // 生成单链表 { LNode *head,*p,*q; char x; head=(LNode *)malloc(sizeof(LNode)); //生成头结点 head->next=NULL; p=head; q=p; //q始终指向链尾结点 printf("Input any char string:\n"); scanf("%c",&x); while(x!='\n') { p=(LNode *)malloc(sizeof(LNode)); p->data=x; p->next=NULL; q->next=p; //在链尾插入 q=p; scanf("%c",&x); } return head; //返回指向单链表的头指针head } void Convert(LNode *H) //单链表的逆置 { LNode *p,*q; p=H->next; //p 指向剩余结点链表的第一个数据结点 H->next=NULL; //新链表H 初始为空 while(p!=NULL) { q=p; //从剩余结点链表中取出第一个结点 p=p->next; //p 继续指向剩余结点链表新的第一个数据结点 2 q->next=H->next; //将取出的结点*q 插入到新链表H 的链首 H->next=q; } } void main() { LNode *A,*p; A=CreateLinkList(); //生成单链表A Convert(A); // 单链表逆置 p=A->next; // 输出逆置后的单链表 while(p!=NULL) { printf("%c",p->data); p=p->next; } printf("\n"); } 双链表合并 //对两个元素递增有序的单链表A 和 B,编写算法将A、 B 合并成一个按元素递减有序的单链表C,要求算法使用A\B 中原有的结点,不允许增加新结点 #include #include typedef struct node { int data; //data为结点的数据信息 struct node *next; //next 为指向后继结点的指针 }LNode; LNode *CreateLinkList() //生成单链表 { LNode *head,*p,*q; int i,n; head=(LNode *)malloc(sizeof(LNode)); //生成头结点 head->next=NULL; p=head; q=p; //指针q 始终指向链尾结点 printf("Input length of list:\n"); scanf("%d",&n); // 读入节点数据 printf("Input data of list:\n"); for(i=1;i<=n;i++) // 生成链表的数据结点 { p=(LNode *)malloc(sizeof(LNode)); //申请一个节点空间 scanf("%d",&p->data); p-...