题目:
设C={a1,b1,a2,b2,…,an,bn}为线性表,采用带头结点的单链表存放,现将其拆分为两个线性表,使得A={a1,a2,...,an},B={bn...,b2,b1}
思路:
依次采用头插法处理B表即可
代码:
LinkList Creat(LinkList &A) {
LinkList B=(LinkList)malloc(sizeof(LNode)); //创建B表表头
B->next=NULL; //B表的初始化
LNode *p=A->next,*q; //p为工作指针
LNode *ra=A; //ra始终指向A的尾结点
while (p! = NULL) {
ra->next=p;ra=p;
p=p->next;
if(p!=NULL){
q=p->next; //头插后,*p将断链,因此用q记忆*p的后继
p->next=B->next; //将*p插入到B的前端
B->next=p;
p=q;
}
}
ra->next=NULL;
return B;
}
注意:
采用头插法插入结点后,*p的指针域已改变,若不设变量保存其后继结点,则会引起断链,从而导致算法出错。
考察内容:
单链表