题解 | #【冲刺双百】删除有序链表中重复的元素-I#
删除有序链表中重复的元素-I
http://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79
思路
- 创建双指针:now和nex,初始nex=now.nex
- nex开始遍历链表,跳出条件为
- nex为空
- nex.val与now.val不相等
- 遍历暂停时的处理
- 先判断若nex与val的值不相等,则说明找到了now的下一个结点为nex,令now.next=nex,now和nex均向后移动一格,nex继续遍历。
- 再判断若nex为空(此时nex和val的值相等),则说明nex遍历过的点均需要删除,直接令now.next=null,返回头结点
代码
public class Solution {
public ListNode deleteDuplicates (ListNode head) {
if(head==null||head.next==null) return head;
ListNode now=head;
ListNode nex=now.next;
while(nex!=null){
while(nex.val==now.val&&nex.next!=null){
nex=nex.next;
}
//如果值不相等,无论nex.next是否为空,都令now指向nex;
if(nex.val!=now.val){
now.next=nex;
nex=nex.next;
}//如果nex.next为空且now和nex的值仍然相等
else{
now.next=null;
return head;
}
now=now.next;
}
return head;
}
}