分享

Remove Duplicates from Sorted List

 雪柳花明 2016-09-27
原题链接: http://oj./problems/remove-duplicates-from-sorted-list/ 
这是一道比较简单的链表操作的题目,要求是删去有序链表中重复的元素。方法比较清晰,维护两个指针,一个指向当前不重复的最后一个元素,一个进行依次扫描,遇到不重复的则更新第一个指针,继续扫描,否则就把前面指针指向当前元素的下一个(即把当前元素从链表中删除)。时间上只需要一次扫描,所以是O(n),空间上两个额外指针,是O(1)。代码如下: 
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public ListNode deleteDuplicates(ListNode head) {  
  2.     if(head == null)  
  3.         return head;  
  4.     ListNode pre = head;  
  5.     ListNode cur = head.next;  
  6.     while(cur!=null)  
  7.     {  
  8.         if(cur.val == pre.val)  
  9.             pre.next = cur.next;  
  10.         else      
  11.             pre = cur;  
  12.         cur = cur.next;  
  13.     }  
  14.     return head;  
  15. }  
链表操作在LeetCode中占有一定的比例,不过面试中出现的频率并不是特别高,不过基本的操作还是要熟练的。这道题目还可以求于另一个数据结构数组中,也比较简单,有兴趣可以看看Remove Duplicates from Sorted Array
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     public int val;
 *     public ListNode next;
 *     public ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode DeleteDuplicates(ListNode head) {
        ListNode dummy=new ListNode(0);
        dummy.next=head;
        head=dummy;
        
        while(head.next!=null&&head.next.next!=null)
        {
            ListNode n1=head.next;
            ListNode n2=n1.next;
            
            if(n1.val == n1.next.val)
            {
                n1.next=n1.next.next;
            }
            else
            {
                head=head.next;
            }
        }
        
        return dummy.next;
    }
}



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多