LeetCode Remove Duplicates from Sorted List II
2014-04-17 20:23
218 查看
class Solution { public: ListNode *deleteDuplicates(ListNode *head) { if (head == NULL || head->next == NULL) return head; ListNode *tail = NULL, *h = NULL, *cur = head->next; ListNode *prev = head; bool nodup = true; while (cur != NULL) { if (cur->val != prev->val) { if (nodup) { if (h == NULL) { h=tail=prev; } else { tail->next = prev; tail = prev; } tail->next = NULL; } else { nodup = true; // reset the flag } } else { nodup = false; } prev = cur; cur = cur->next; } if (nodup) { if (h == NULL) { h = prev; } else { tail->next = prev; } } return h; } };
需要仔细写啊
第二轮:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given
1->2->3->3->4->4->5, return
1->2->5.
Given
1->1->1->2->3, return
2->3.
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ // 9:40 class Solution { public: ListNode *deleteDuplicates(ListNode *head) { if (head == NULL) { return NULL; } ListNode fakeHead(0); ListNode* last = &fakeHead; ListNode* cur = head->next; ListNode* pre = head; int cnt = 1; while (cur != NULL) { if (cur->val != pre->val) { if (cnt == 1) { last->next = pre; last = pre; } cnt = 1; } else { cnt++; } pre = cur; cur = cur->next; } if (cnt == 1) { last->next = pre; last = pre; } last->next = NULL; return fakeHead.next; } };
相关文章推荐
- Java虚拟机原理、内存分配和回收机制
- c/c++中内存区域划分大总结
- 八周 项目4 虽然不是自己的原文 而且也不大懂 但也有我的修改 有我的收获
- 小球下落
- shell程序设计(3)
- vim中多标签和多窗口的使用
- 拓扑排序模板
- 助教:c/c++语言——亲密数
- About MJPEG-streamer
- MFC下文本查找功能的实现
- 黑马程序员_学习笔记第13天 String类
- Java OCR tesseract 图像智能字符识别技术
- Java OCR tesseract 图像智能字符识别技术
- Java OCR tesseract 图像智能字符识别技术
- TIME_WAIT
- ACMjava经典贪心区间问题,区间选点,不相交区间,区间覆盖
- 简单的无限分类中递归子栏目
- 编程心得
- 笔记整理-数据库语言总结2012-12-2
- 关于内存管理的理解