单链表 尾插法

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跳出循环。

你可能感兴趣的:(算法)