每日博客Day 7
每日算法
707.设计链表
题意:
在链表类中实现这些功能:
- get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。
- addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表的第一个节点。
- addAtTail(val):将值为 val 的节点追加到链表的最后一个元素。
- addAtIndex(index,val):在链表中的第 index 个节点之前添加值为 val 的节点。如果 index 等于链表的长度,则该节点将附加到链表的末尾。如果 index 大于链表长度,则不会插入节点。如果index小于0,则在头部插入节点。
- deleteAtIndex(index):如果索引 index 有效,则删除链表中的第 index 个节点。
自己定义了一个链表,然后自己去看案例去调试项目的代码,一步一步的检查让代码通过,感觉还是有一点成就感的,就是代码的调试效率有点低下,这一个算法题目涉及到了五种链表的功能,如果自己一个人一口气全部写下来我感觉还是挺厉害的了。
class MyLinkedList {
public:
//在类中顶一个结构体,我们使用虚拟头结点的方式
struct LinkedList
{
LinkedList(int val)
{
this->val = val;
next = NULL;
}
int val;
LinkedList* next;
};
//链表的初始化,我们采用虚拟头结点的方式
MyLinkedList() {
m_size = 0;
dummyHead = new LinkedList(0);
}
//get没问题的
int get(int index) {
if (index > (m_size - 1) || index < 0) {
return -1;
}
LinkedList* cur = dummyHead->next;
while(index-- && cur->next != nullptr){
// 如果--index 就会陷入死循环
cur = cur->next;
}
return cur->val;
}
//没问题的
void addAtHead(int val) {
LinkedList* NewHead = new LinkedList(val);
NewHead->next = dummyHead->next;
dummyHead -> next= NewHead;
m_size++;
}
void addAtTail(int val) {
LinkedList* NewTail = new LinkedList(val);
LinkedList* cur = dummyHead;
while (cur->next != nullptr)
{
cur = cur->next;
}
cur->next = NewTail;
m_size++;
}
void addAtIndex(int index, int val) {
if (index > (m_size) || index < 0)
{
return;
}
if(index <= 0) index = 0;
LinkedList* NewIndex = new LinkedList(val);
LinkedList* cur = dummyHead;
while (index--)
{
cur = cur->next;
}
//现在的cur指向的是要插入节点的前一个节点位置
NewIndex->next = cur->next;
cur->next = NewIndex;
m_size++;
}
//没问题的
void deleteAtIndex(int index) {
if (index > (m_size - 1) || index < 0)
{
return;
}
LinkedList* cur = dummyHead;
while (index--)
{
cur = cur->next;
}
LinkedList* temp = cur->next;
cur->next = cur->next->next;
temp = nullptr;
m_size--;
}
private:
int m_size;
LinkedList* dummyHead;
};
项目进度
双端网络模块的开发和准备:
明白这段代码的逻辑是怎么样的
else
{
CServSocket* pserver = CServSocket::GetInstance();
int count = 0;
if (pserver->InitSocket() == false)
{
MessageBox(NULL, _T("网络初始化异常!"), _T("网络初始化失败"), MB_OK | MB_ICONERROR);
exit(0);
}
while (CServSocket::GetInstance() != NULL)
{
if (pserver->AcceptClient() == false)
{
if (count > 3)
{
MessageBox(NULL, _T("多次无法正常接入用户!"), _T("接入用户失败"), MB_OK | MB_ICONERROR);
exit(0);
}
MessageBox(NULL, _T("无法正常接入用户!"), _T("接入用户失败"), MB_OK | MB_ICONERROR);
count++;
}
int ret = pserver->DealCommand();
if (ret > 0)
{
ret = ExcuteCommand(ret);
if (ret != 0)
{//表明在执行函数失败
TRACE("执行命令失败:%d ret = %d\r\n", pserver->GetPacket().sCmd, ret);
}
pserver->CloserClient();
}
}
}
网络模块的调试和完善:在调试项目的时候客户端一直卡死,不知道是什么问题,后面调试的时候问题就是说,size的边界是有问题的,后面返回的ACK是-1的原因也是因为数据cmd两边对应不上
面试内容
无
设计模式
设计模式的一些了解
设计模式的原则
依赖倒置原则(DIP)
迪米特法则(LOD)
日总结
- 看了《白日梦想家》电影,感觉自己很喜欢这种摄影风格。风光摄影的画面给人带来的感觉非常的震撼,给人的内心带来一种安静的感觉。
- 昨天晚上是十二点休息的,但是还是早上十一点才起来,这三天都不是很在状态,早上起不来
- 下午的项目效率不是很高,一个下午的时候才看了两节课的内容,项目写起来感觉挺痛苦的