删除链表中重复的结点 Delete duplicated nodes in linked list
来源:互联网 发布:ffmpeg java调用 编辑:程序博客网 时间:2024/06/04 18:50
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5
题解
这题看似很简单,但是务必考虑如下情形:
- 1->1
- 1->1->2->2
- 1->2->2->3->3
- 空链表
另外,遍历链表千万不要为了简洁写成for循环!我因为这个出了bug,看了很久才看出来。
代码
class Solution { ListNode* dedup(ListNode* head) { int val = head->val; while (head && head->val == val) { head = head->next; } return head; }public: ListNode* deleteDuplication(ListNode* pHead) { if (pHead == NULL) return NULL; ListNode *p = pHead, *pBefore = NULL; while (p != NULL) { if (p->next && p->next->val == p->val) { if (pBefore) { pBefore->next = dedup(p); p = pBefore->next; continue; } else { pHead = dedup(p); p = pHead; continue; } } pBefore = p; p = p->next; } return pHead; }};
0 0
- 删除链表中重复的结点 Delete duplicated nodes in linked list
- (LeetCode)Delete Node in a Linked List --- 删除链表中结点
- leetcode 237. Delete Node in a Linked List 删除没有父结点的元素
- leetcode解题之237# Delete Node in a Linked List Java版 (删除链表中指定的结点)
- LeetCode OJ 之 Delete Node in a Linked List (删除链表中的结点)
- [leetcode] Delete Node in a Linked List 删除链表中的一个结点
- 237. Delete Node in a Linked List&在O(1)时间删除链表结点
- [LeetCode]237. Delete Node in a Linked List(删除链表结点)
- LeetCode 237 Delete Node in a Linked List(在链表中删除节点)(Linked List)
- Delete Node in a Linked List 单链表删除节点
- leetcode237---Delete Node in a Linked List(删除指定节点)
- LeetCode 24 Swap Nodes in Pairs(交换序列中的结点)(Linked List)
- 2.swap-two-nodes-in-linked-list(交换链表中的两个结点)
- [LintCode] Swap Two Nodes in Linked List 交换链表中的两个结点
- Delete Node in a Linked List 删除链表的一个节点
- 237. Delete Node in a Linked List | 删除单链表的节点
- Delete Node in a Linked List 删除链表的节点
- [LeetCode-237] Delete Node in a Linked List(删除链表中节点)
- 68 sql 查找表中同一个字段出现的重复项次数 视图
- my life of w一
- 泛型
- 杭电2108判断凹凸边形
- 正确释放Vector内存
- 删除链表中重复的结点 Delete duplicated nodes in linked list
- 一个老程序员的十年回顾
- shell学习五十八天----/proc文件系统
- 前端学习常用网址
- 并查集
- JDK 1.8 签名
- 如何把Android的一款自定义仪表盘控件整合到你的项目里
- python的除法
- Snail—UI学习之提醒框UIAlertView