有序链表删除重复元素
2015-03-23 10:14
405 查看
从有序链表中删除重复元素,每种剩下一个。1->1->2->2->3->4->4;===>1->2->3->4
两个游标p,q走。p为标杆值,若q的值等于p时,p继续走,不等于时,就将p的下一个置为q。
相关题目:从有序数组中去除重复元素
从有序链表中删除重复元素,若有重复全部删除。1->1->2->2->3->4->4;===>3
不同点在于要保留一个前指针,删除前指针到q中间的所有元素。判断标杆值与q值不等时要考虑q是否是p的下一个节点。
两个游标p,q走。p为标杆值,若q的值等于p时,p继续走,不等于时,就将p的下一个置为q。
public ListNode deleteDuplicates(ListNode head){ if(head != null){ ListNode p = head, q = head; for( ; q != null;q = q.next){ if(p.val != q.val){ p.next = q; p = q; } } p.next = null; //结尾,容易遗忘 } return head; }
相关题目:从有序数组中去除重复元素
public int removeDuplicates(int[] A){ if(A == null || A.length == 0) return 0; int p = 0, q = 0; for(; q < A.length; q++) if(A[p] != A[q]) A[++p] = A[q]; return p+1; }
从有序链表中删除重复元素,若有重复全部删除。1->1->2->2->3->4->4;===>3
不同点在于要保留一个前指针,删除前指针到q中间的所有元素。判断标杆值与q值不等时要考虑q是否是p的下一个节点。
public ListNode deleteDuplicates(ListNode head) { if(head != null){ ListNode p = head, q = head,pre = null; for( ; q != null; q = q.next){ if(p.val != q.val){ if(p.next != q){ p = q; if(pre == null) head = p; else pre.next = q; }else{ pre = p; p = q; } } } if(p.next != q){ if(pre == null) head = null; else pre.next = q; }//结尾,容易错!!!! } return head; }
相关文章推荐
- 单链表删除有序重复元素
- leetcode 删除有序链表中的重复元素
- [LeetCode]83. Remove Duplicates from Sorted List(删除有序链表的重复元素 )
- leetcode83,删除有序链表中的重复元素
- [2178]链表的有序集合 (链表的插排法+重复元素的删除) SDUT
- 删除一个有序链表的重复元素
- 3597 Problem F 算法2-25 有序单链表删除重复元素
- 有序链表的重复元素删除
- 82. Remove Duplicates from Sorted List II(删除有序链表中的重复元素)
- 删除有序链表的重复元素 Remove Duplicates from Sorted List
- leetcode-83. Remove Duplicates from Sorted List(删除有序链表中的重复元素)
- [LeetCode]Merge Two Sorted Lists & Remove Duplicates from Sorted List 两个有序链表合并为一个&删除链表重复元素
- [2178]链表的有序集合 (链表的插排法+重复元素的删除) SDUT
- 删除有序链表中重复的元素
- 数据结构实验之链表七:单链表中重复元素的删除
- 寒假第二天--线性表--数据结构实验之链表七:单链表中重复元素的删除
- 数据结构实验之链表七:单链表中重复元素的删除
- Remove Duplicates from Sorted List 删除链表中的重复元素,保留一次
- Remove Duplicates from Sorted Array 有序数组删除重复元素 @LeetCode
- 面试题精选(84):使序列有序的最少交换次数(minimum swaps) + 删除序列中所有重复的元素