美文网首页
【算法题】4.删除链表指定范围内的结点

【算法题】4.删除链表指定范围内的结点

作者: _涼城 | 来源:发表于2020-04-13 11:29 被阅读0次
    题目

    设计一个算法,删除递增有序链表中值大于等于mink且小于等于maxk(mink,maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同)的所有元素。

    题目大意:

    删除链表中属于范围mink<=n<=maxk的值。

    输入:

    0->2->4->6->8->10

    输出:

    10->8->6->4->2->0

    解析:

    迭代法。

    1. 维护一个p指针指向L的首元结点,维护一个q指针指向L的头结点用于记录上一次迭代的无需删除的结点。
    2. mink<=p<=maxk,则使得一个Temp指针指向p,将当前q的下一个结点指向要删除的p结点的下一个结点,p指向p的下一个结点,释放Temp指向的结点。
    3. p<minkp>maxk,记录q指向当前p结点,p指向p的下一个结点,直至迭代完成。
    复杂度分析

    时间复杂度:O(n)
    空间复杂度:O(1)

    代码
       void deleteRangWithLists(LinkList *l1,int mink,int maxk){
         
           if (l1 == NULL)
           {    
            return;
           }
           ListNode *p1 = (*l1)->next;
            
           ListNode *q = (*l1); 
           
           while(p1!= NULL){
        
             int pVal = p1->data;
             if (pVal >= mink && pVal <= maxk)
              {
                  ListNode *temp = p1;//6
       
                  q->next = p1->next;// 3->next = 9;
                  p1 = p1->next; //9
                  free(temp);//释放6
              }else{
                    //3 // 9 
                q = p1;
                p1 = p1->next;
              }
           }
       
       }
        ```
    

    相关文章

      网友评论

          本文标题:【算法题】4.删除链表指定范围内的结点

          本文链接:https://www.haomeiwen.com/subject/wxkgmhtx.html