头插法以及尾插法创建链表;
头插 法:
LNode *create_LinkList()
{
int data;
LNode *head,*p;
head = (LNode*)malloc(sizeof(LNode));
head -> next = NULL;
while(1)
{
cin>>data;
if(data == 32767)
{
break;
}
p = (LNode*)malloc(sizeof(LNode));
p->data=data; //数据域赋值
p->next=head->next;
head->p; //新创建的节点总是作为第一个节点
}
return (head);
}
尾插法:
LNode *creat_LinkList()
{
int data;
LNode *head, *p, *q;
head = p = (LNode*)malloc(sizeof(LNode));
p->next=NULL:
while (1)
{
cin >> data;
if (data == 32767)
{
break;
}
q = (LNode*)malloc(sizeof(LNode));
q->data = data;
q->next = p->next;
p->next = q;
p = q;
}
return head;
}
对比这两种插入方法,尾插法多了一个p=q;
头插法没有是因为是在头部插入的,每次插入的值都成为了头结点,不需要移动head,而尾插法头结点的值是固定的,是从头向后插,需要移动头结点,所以最后遍历输出头插法的时候是逆序的。
循环链表:
头尾相接的链表,最后一个节点的指针域指向链表的头结点。从循环链表的任意一个节点出发都可以找到链表中的其他节点。
改变的地方:
(1):判空:head->next==head?
(2):是否是表尾节点:p->next==head?
注:上一篇中的链表是用头插法写的,所以输出时是逆序的。