原创博文,转载请注明出处
链表分类:单链表,插入删除和查找的时间复杂度均为O(n)
双链表,插入、删除和查找的时间复杂度为O(1)
循环链表,表中最后一个节点的指针不是NULL,而改为指向头结点,从而整个链表形成一个环。
静态链表,借助数组来描述线性表的链式存储结构,这儿的指针是结点的相对地址。和顺序表一样需要预先分配一块连续的内存空间。以next==0作为其结束的标志。
综合应用:
1.设计一个递归算法,删除不带头节点的单链表L中所有值为x的节点。
思路:可以设计一个函数f(L,x)删除以L为首结点指针的单链表中所有值为x的结点,那么f(L->next,x)则是删除以L->next为首结点指针的单链表中所有值等于x的结点。
借助一个递归工作栈,深度为O(n),时间复杂度为O(n)
1 void Del_x(Linklist &L, ElemType x){ 2 LNode *p; //p指向待删除结点 3 4 if(L==NULL) 5 return; 6 if(L->data==x){ 7 p=L; 8 L=L->next; 9 free(p); 10 Del_x(L, x); 11 } 12 else 13 Del_x(L->next, x); 14 }