题目
给定一个排序链表,删除所有重复的元素每个元素只留下一个。
样例
给出1->1->2->null,返回 1->2->null
给出1->1->2->3->3->null,返回 1->2->3->null
解题思路
首先看条件,给定的是一个排序链表。
既然是一个排序链表,那其中的相同元素必然是相邻的。
那我们就可以用变量preNode记录每一个节点的前驱节点,用curNode记录当前节点。
每次比较preNode和curNode,
若相等删除当前curNode引用的节点,curNode后移,preNode不变,
若不相等则将preNode和curNode后移。
代码实现
/**
* @param ListNode head is the head of the linked list
* @return: ListNode head of linked list
*/
public static ListNode deleteDuplicates(ListNode head) {
if(head == null)
return null;
// write your code here
ListNode preNode = null;
ListNode curNode = head;
while(curNode != null)
{
if(preNode != null && preNode.val == curNode.val)
{
preNode.next = curNode.next;
curNode = preNode.next;
}else{
preNode = curNode;
curNode = curNode.next;
}
}
return head;
}