剑指offer(四十三)之删除链表中重复的结点
2016-06-08 11:15
316 查看
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
代码1:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
代码1:
import java.util.*; public class Solution { public ListNode deleteDuplication(ListNode pHead) { if(pHead == null) return null; //定义一个链表,存放所有节点的值 ArrayList<Integer> list = new ArrayList<Integer>(); //定义一个头指针 ListNode p = pHead; list.add(p.val); while(p.next != null) { //滑动指针 p = p.next; list.add(p.val); } //取出存在不重复的值 ArrayList<Integer> list2 = new ArrayList<Integer>(); for(int i : list) { int count = 0; for(int j : list) { if(i == j) count ++; } if(count == 1) list2.add(i); } //重建链表 if(list2.size() == 0) return null; ListNode pHead2,p2; pHead2 = new ListNode(list2.get(0)); p2 = pHead2; for(int i = 1;i < list2.size();i ++) { p2.next = new ListNode(list2.get(i)); p2 = p2.next; } return pHead2; } }代码2:
public class Solution { public ListNode deleteDuplication(ListNode pHead) { if (pHead == null) { return null; } ListNode headNode = new ListNode(0); headNode.next = pHead; ListNode pre = headNode; ListNode p = pHead; while(p != null && p.next != null){ if(p.val == p.next.val){ int temp = p.next.val; while(p != null && p.val == temp){ p = p.next; } pre.next = p; }else{ pre = p; p = p.next; } } return headNode.next; } }
相关文章推荐
- js数组清空和添加数据
- Bootstrap 模态框避免点击背景处关闭
- 24. Swap Nodes in Pairs
- 在arcgis javascript 的sdk中 地图自动居中和放大 到一个graphic的位置.并且自动打开InfoWindow
- String 与StringBuffer的区别与使用
- 前端优化的14条原则
- json串解析问题
- onedrive-d WARNING: Dummy-2: failed to dump config to file .onedrive/config_v2.json
- HTML的checkbox和radio样式美化的简单实例
- JavaScript单体模式
- HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用?
- JS深入了解闭包
- jQuery列表拖动排列-jquery list dragsort插件参数和使用方法
- jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
- HTML5 Web Storage -- 让Cookies看起来如此古老
- jquery模拟多级复选框效果的简单实例
- jQuery实现添加“成绩单” 搜索功能和清除功能
- javascript学习——样式
- jQuery的bind()的三种使用方式事件监听
- Node的定义、Node运行的基础、Node如何实现类似于多线程的原理