zoukankan      html  css  js  c++  java
  • 算法总结之 在单链表中删除指定值的节点

    给定一个链表的头节点head和一个整数num,请实现函数将值num的节点全部删除

    方法一 利用栈或者其他容器收集的方法  时间复杂度O(N)  额外空间复杂度O(N)

    将值不等于num的节点收集起来!!!哈哈哈哈哈哈哈哈哈哈啊哈哈哈哈啊哈哈   最后将占地的节点作为新的头节点返回

    package TT;
    
    import java.util.Stack;
    
    public class Test109 {
    
    	public class Node{
    		public int value;
    		public Node next;
    		public Node(int data){
    			this.value=data;
    		}
    	}
    	
    	public Node removeValue1(Node head, int num){
    		 Stack<Node> stack = new Stack<Node>();
    		 while(head!=null){
    			 if(head.value !=num){
    				 stack.push(head);
    			 }
    			 head=head.next;
    		 }
    		 
    		while(!stack.isEmpty()){
    			stack.peek().next=head;
    			head=stack.pop();
    			
    		}
           return head;		
    	}
    }
    

      

    方法二 直接调整

    首先从链表头开始,找到第一个值不等于num的节点,作为新的头节点,这个节点是肯定不用删除的,记为newHead。 

       继续往后遍历  假设当前节点为cur 如果cur节点值等于num,就将cur节点删除,如果不等于num 就令pre=cur 更新最近一个值不等于num的节点

    package TT;
    
    
    public class Test110 {
      public class Node{
    	  public int value;
    	  public Node next;
    	  public Node(int data){
    		  this.value=data;
    	  }
      }
      
      public Node removeValue2(Node head, int num){
    	 
           while(head !=null){
        	   
        	   if(head.value != num){
        		    break;
        	   }
        	   head=head.next;
           }
           Node pre = head;
           Node cur = head;
           while(cur!=null){
        	   if(cur.value==num){
        		   pre.next=cur.next;
        	   }else {
    			pre=cur;
    		   }
        	   cur=cur.next;
           }
    	  return head;
      }
      
      
      
    	
    }
    

      

      

  • 相关阅读:
    07月26日总结
    07月25日总结
    07月24日总结
    07月23日总结
    07月22日总结
    07月20日总结
    07月19日总结
    spinlock in c++11 based on atomic_flag std::memory_order_acquire
    c++ nullptr
    C++11 新特性: unordered_map 与 map 的对比
  • 原文地址:https://www.cnblogs.com/toov5/p/7504816.html
Copyright © 2011-2022 走看看