LinkList CreatListR1(void) {//用尾插法建立带头结点的单链表 char ch; LinkList head=(ListNode *)malloc(sizeof(ListNode));//生成头结点 ListNode *s,*r; //工作指针 r=head; // 尾指针初值也指向头结点 while((ch=getchar())!='\n'){ s=(ListNode *)malloc(sizeof(ListNode));//生成新结点 s->data=ch; //将读入的数据放入新结点的数据域中 r->next=s; r=s; } r->next=NULL;//终端结点的指针域置空,或空表的头结点指针域置空 return head; } r->next=s;r=s;
尾插法是向链表尾部逐渐插入结点的,像算法中描述的一样,然后r先指向头指针,s是要逐个插入的结点的指针,r->next=s这句是说把s插入头指针之后,成为第一个结点,意思就是说把s结点接入到链表之中了,然后接着r=s这句是让r指针指向刚刚插入的那一结点,在这个节点之后进行进一步的插入,算法还是r->next=s,逐个逐个往尾部插入结点,直到最后一个结点的指针域为空r->next=NULL跳出循环。