美文网首页
【算法题】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