线性表总结
1.代码段1
简介:要求:有一个带头结点的单链表L=(a1,b1,a2,b2,......,an,bn),设计一个算法将其拆分成两个带头结点的单链表L1和L2,其中L1=(a1,a2,......,an),L2=(b1,b2,......,bn),要求L1使用L的头结点。
1.1 代码1
void split(LinkNode *&L, LinkNode *&L1, LinkNode *&L2)//1
{LinkNode *p=L >next, *q. *r1; //p指向第1个数据结点//2
L1=L; //L1利用原来L的头结点//3
r1=L1; //r1始终指向L1的尾结点//4
L2=(LinkNode *)malloc(sizeof(LinkNode)); //创建L2的头结点//5
L2->next=NULL;//置L2的指针域为NULL//6
while (p!= NULL)//7
{ r1->next=p;//采用尾插法将p(data值为ai)插人L1中//8
r1=p; //9
p=p->next; //p移到下一个结点(data值为bi)//10
q=p->next;//头插法会修改结点p的next城,用q保存结点p的后继结点//11
p->next=L2-> next; //采用头头插法将结点p插人L2中//12
L2 -> next=p;//13
p=q; //p重新指向a+1的结点//14
}//15
r1-> next= NULL;//16
}//17
1.2 不懂的地方:
第4行
为什么要创建新的指针r1使得r1=L1,如果直接使用L1的话,后续程序会出现什么样的错误?
2.代码段2
简介:输出函数。
要求:链表不为空,输出链表内容。数据之间空格隔开,尾部不带空格。
链表为空,输出空链表!
2.1 代码2
void DispList(LinkList L)//1
{//2
if(L->next==NULL)//3
{//4
cout<<"空链表!"; //5
}//6
else//7
{//8
cout<
L=L->next;//10
while(L->next!=NULL)//11
{//12
L=L->next;//13
cout<<" "<
}//15
}//16
2.2 不懂的地方:
第13行
为了使结尾没有空格,先输出链表第一个元素,后面都以先输出空格再输出元素的形式输出。第10行中已经让L指向L的下一个结点,为什么在后面while的循环中还要先让L再指向下一个结点?
浙公网安备 33010602011771号