链表中头和尾节点/指针的常规用法:插入、删除、遍历

链表中头和尾节点/指针的常规用法

循环、永远非空

         头插入:head->next= head;

         在x节点后插入t节点:t->next= x->next;  x->next = t;

         删除x后的节点:x->next= x->next->next; 

         遍历循环:(1) t =head;

                                  do{ …; t = t->next; }while(t!= head);

                              (2)for(t= head; t != head; t = t->next) {…}

         测试只有一个元素:if(head->next == head)

 

头指针、尾节点为空

         初始化:head =NULL;

         在x节点后插入t节点:if(x ==NULL) { head = t;       t->next = NULL} //空表

                                                         else{ t->next= x->next;  x->next = t;}

         删除x后的节点:t = x->next;       x->next = t->next;    free(t);

         遍历循环:(1) t =head;         while(t!=NULL) {…; t = t->next}

                          (2)for(t= head; t !=NULL; t = t->next) {…}

         测试表是否为空:if(head ==NULL)

 

有哑元头节点,尾节点为空

         初始化:head = (Node*)malloc(sizeof(*head));             head->next =NULL;

         在x节点后插入t节点:if(x ==NULL) {head->next= t;      t->next = NULL}//空表

                                                         else{t->next = x->next;         x->next= t}

         删除x后的节点:t = x->next;       x->next = t->next;   free(t);

         遍历循环:(1) t =head->next;                while(t !=NULL) {…; t = t->next}

                          (2)for(t= head->next; t !=NULL; t = t->next) {…}

         测试链表为空:if(head->next ==NULL);

 

有哑元头节点,尾节点

         初始化:head = (Node*)malloc(sizeof(*head));

                            z= (Node*)malloc(sizeof(*z));

                           head->next= z;        z->next = z;

         插入、删除、遍历同上;

         测试链表为空:if(head->next == z);

        

 

《算法:C语言实现》P57

你可能感兴趣的:(数据结构)