Day2-学习内容:
(1)剑指Offer
编程题18:删除链表中重复的节点
编程题39:数组中出现次数超过一半的数字
(2)Leetcode
例1:罗马数字换成整数
例2: 求股票买进卖出的最大利润
(3)腾讯2017年暑期实习真题
编程题1-构造回文
(4)试题广场-腾讯校招笔试真题(3道单选)
1.剑指Offer
编程题18:删除链表中重复的节点
题目描述:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
书上解法:
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* deleteDuplication(ListNode* pHead)
{
if (pHead==nullptr){
return;
}
ListNode *pPreNode = nullptr;
ListNode *pNode = pHead;
while(pNode!= nullptr){
ListNode *pNext = pNode->next;
bool needDelete = false;
if(pNext!=nullptr&&pNext->val==pNode->val){
needDelete = true;
}
if(!needDelete){
pPreNode=pNode;
pNode=pNode->next;
}
else{
int val=pNode->val;
ListNode *pToBeDel = pNode;
while(pToBeDel!=nullptr&&pToBeDel->val==val){
pNext = pToBeDel->next;
delete pToBeDel;
pToBeDel = nullptr;
pToBeDel = pNext;
}
if(pPreNode==nullptr){
pHead=