《剑指Offer》面试题57:删除链表中重复的节点
2016-07-09 21:07
465 查看
题目:在一个排序的链表中,如何删除重复的节点?
样例输入: 1 2 3 3 4 4 5
样例输出: 1 2 5
1.新建一个头节点,以防第一个节点被删除。
2.保存当前节点上个节点,循环遍历整个链表,如果当前节点的值与下一个节点的值相等,则将当前节点的值与next.next节点的值比较,直到不相等或者null为止,最后将当前节点的上个节点pre指向最后比较不相等的节点。
3.如果当前节点与next节点不相等,则直接节点指针全部向后移动一位。
样例输入: 1 2 3 3 4 4 5
样例输出: 1 2 5
1.新建一个头节点,以防第一个节点被删除。
2.保存当前节点上个节点,循环遍历整个链表,如果当前节点的值与下一个节点的值相等,则将当前节点的值与next.next节点的值比较,直到不相等或者null为止,最后将当前节点的上个节点pre指向最后比较不相等的节点。
3.如果当前节点与next节点不相等,则直接节点指针全部向后移动一位。
package com.test20160709; /** * Created by yan on 2016/7/9. */ public class DeleteDuplication { public ListNode deleteDuplication(ListNode pHead) { if(pHead==null) return pHead; ListNode first = new ListNode(0); first.next = pHead; ListNode p = pHead; ListNode pre = first; while (p!=null&&p.next!=null){ if(p.val==p.next.val) { int val = p.val; while(p!=null&&p.val==val) p = p.next; pre.next = p; }else { pre= p; p = p.next; } } return first.next; } public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } }
相关文章推荐
- 一个关于if else容易迷惑的问题
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- 一道sql面试题附答案
- C#模拟链表数据结构的实例解析
- C# 超高面试题收集整理
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- 人人网javascript面试题 可以提前实现下
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- PHP中设置一个严格30分钟过期Session面试题的4种答案
- Node.js环境下JavaScript实现单链表与双链表结构
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- 据说是雅虎的一份PHP面试题附答案
- php牛逼的面试题分享
- 一套比较完整的javascript面试题(部分答案)