题目地址:https://leetcode.com/problems/remove-duplicates-from-sorted-list/
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.
题目要求去除一个有序的链表中的重复的元素,既然是有序的,那么重复元素肯定是相邻的,所以我们用两个相邻指针p和q(实际上,p.next=q),逐次向后遍历,发现重复的,则执行p = q.next,控制好停止状态即可。
public class RemoveDuplicatesFromSortedList {
public ListNode deleteDuplicates(ListNode head) {
if (head == null)
return head;
if (head.next == null)
return head;
ListNode p = head;
ListNode q = head.next;
while (q != null) {
if (p.val == q.val) {
p.next = q.next;
q = p.next;
} else {
q = q.next;
p = p.next;
}
}
return head;
}
public static void main(String[] args) {
ListNode node1 = new ListNode(3);
ListNode node2 = new ListNode(3);
ListNode node3 = new ListNode(3);
ListNode node4 = new ListNode(3);
ListNode node5 = new ListNode(3);
ListNode node6 = new ListNode(3);
node1.next = null;
node2.next = node3;
node3.next = node4;
node4.next = node5;
node5.next = node6;
RemoveDuplicatesFromSortedList removeDuplicatesFromSortedList = new RemoveDuplicatesFromSortedList();
removeDuplicatesFromSortedList.deleteDuplicates(node1);
}
}
该实现时间复杂度为O(n)。