剑指offer:删除链表中重复的结点
2016-06-29 00:00
381 查看
题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5解题
class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public class Solution { public ListNode deleteDuplication(ListNode pHead) { if(pHead==null || pHead.next ==null) return pHead; ListNode preNode = null; ListNode pNode = pHead; while(pNode!=null){ ListNode nextNode = pNode.next; boolean needDelete = false; // 找到删除结点 if(nextNode!=null&&nextNode.val==pNode.val){ needDelete = true; } if(!needDelete){// 不需要删除 preNode = pNode; // 更新前驱节点 pNode = pNode.next; // 当前结点后验 }else{ // 需要删除 int value = pNode.val; // 删除结点的值 ListNode toBeDel = pNode; // 找到下一个不需要删除结点 while(toBeDel!=null&&toBeDel.val == value){ nextNode = toBeDel.next; toBeDel = nextNode; } if(preNode==null) pHead = nextNode; else preNode.next = nextNode; pNode = nextNode; } } return pHead; } }
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C#模拟链表数据结构的实例解析
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- Node.js环境下JavaScript实现单链表与双链表结构
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- Java模拟有序链表数据结构的示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- PHP中模拟链表和链表的基本操作示例
- C语言双向链表的表示与实现实例详解
- js链表操作(实例讲解)