描述
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1→1→2,1→1→2,返回1→2,1→2
给出的链表为1→1→2→3→3,1→1→2→3→3,返回1→2→3,1→2→3.
数据范围:链表长度满足 0≤n≤100,链表中任意节点的值满足 ∣val∣≤100
进阶:空间复杂度 O(1),时间复杂度 O(n)
示例1
输入:
{1,1,2}
返回值:
{1,2}
示例2
输入:
{}
返回值:
{}
因为链表是有序链表,因此相同元素的结点必然相连,所以只需要判断当前元素是否和前一个元素相同即可判断出是否是相同结点
如果是相同结点,那么将前一个结点指向当前结点的下一个结点,这样就起到了删除当前结点的作用
此时有一个需要注意,如果此次循环中需要删除当前结点,那么前一个结点的位置是不需要移动的
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head ListNode类
* @return ListNode类
*/
public ListNode deleteDuplicates (ListNode head) {
ListNode mHead = head;
ListNode mPreNode = null;
int temp;
if (mHead == null) {
return null;
}
temp = mHead.val;
mHead = mHead.next;//指向第二个结点
mPreNode = head;//指向第一个结点
while (mHead != null) {
//因为有序,所以相同value的结点必然相连。如果出现重复结点,就删除当前结点
if (temp==mHead.val){
mPreNode.next = mHead.next;
}else{
mPreNode = mHead;
}
temp = mHead.val;
mHead = mHead.next;
}
return head;
}
}