题解 | #【冲刺双百】删除有序链表中重复的元素-I#

删除有序链表中重复的元素-I

http://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79

思路

  1. 创建双指针:now和nex,初始nex=now.nex
  2. nex开始遍历链表,跳出条件为
    • nex为空
    • nex.val与now.val不相等
  3. 遍历暂停时的处理
    • 先判断若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;
    }
}

alt

全部评论

相关推荐

xxxxOxo:这公司幽默得很,要了简历半天一点动静都没有,过一会就给你发个邮件让你做测试,做完又没后文了,纯溜人
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务