《剑指offer》——删除链表中重复的结点
来源:互联网 发布:生物信息学 知乎 编辑:程序博客网 时间:2024/09/21 06:34
题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
思路:
因为重复结点不保留且有可能从头结点开始重复,所以应当新建一个结点位于头结点的之前,从新建的结点开始遍历。因为要将重复的结点全部删除,所以要设置一个结点pNode指向当前结点,然后再一个结点preNode指向当前结点的前一个结点,用于记录删除重复结点之前的位置,将preNode指向删除重复结点之后的结点,即实现了删除重复结点的功能。
class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}class Solution { public ListNode deleteDuplication(ListNode pHead) { if(pHead == null || pHead.next ==null)//若输入链表为空或链表只有一个结点,则返回头结点 return pHead; ListNode preHead = new ListNode(-1);//新建一个结点指向头结点 preHead.next = pHead; ListNode preNode = preHead;//初始化preNode结点指向头结点的前一个结点 ListNode pNode = pHead;//初始化pNode结点指向头结点 while(pNode != null && pNode.next != null) { if(pNode.val == pNode.next.val)//若当前结点的值与当前结点的下一个值相等 { int temp = pNode.val; while(pNode != null && temp == pNode.val)//则将当前结点后移,直到当前结点的值与其下一个结点的值不等 { pNode = pNode.next; } preNode.next = pNode;//将重复结点的前一个结点指向重复结点的后一个结点,即删除重复结点 } else { preNode = pNode;//若当前结点的值与其下一个结点的值不相等 pNode = pNode.next;//则将当前结点与其前一个结点一起后移 } } return preHead.next;//返回头结点,注意不能直接返回pHead,因为有可能从头结点就开始重复 }}
0 0
- 《剑指offer》——删除链表中重复的结点
- 《剑指offer》——删除链表中重复的结点
- 剑指offer——删除链表中重复的结点
- 剑指offer——删除链表中重复的结点
- 剑指offer——56.删除链表中重复的结点
- 剑指offer——链表-删除链表中重复的结点
- 剑指offer—删除链表中重复的结点
- 剑指offer—删除链表中重复的结点
- 剑指offer--删除链表中重复的结点
- 《剑指offer》删除链表中重复的结点
- 剑指offer:删除链表中重复的结点
- [剑指offer]删除链表中重复的结点
- 剑指offer|删除链表中重复的结点
- 《剑指offer》:删除链表中重复的结点
- 剑指Offer:删除链表中重复的结点
- 《剑指offer》-删除链表中重复的结点
- 剑指offer: 删除链表中重复的结点
- 剑指offer 删除链表中重复的结点
- Python——编写函数装饰器
- Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"
- CodeForces 526A-Voting for Photos【模拟】
- UID 是否有对应用户名
- Alec jacobson thesis analysis
- 《剑指offer》——删除链表中重复的结点
- Android依赖注入库Dagger的使用
- iOS小技巧17-iPhone如何安装ipa包
- Gradle(ubuntu) 环境搭建
- 关于Avitivity
- 最大子序列-N
- Codeforces 46D Parking Lot 枚举
- 【BZOJ1878】【codevs2307】HH的项链,莫队算法
- LinuxMySQL主从配置