- 思路
考察链表的特性,添加接地点,删除节点,读节点等,重点利用虚拟节点来完成操作。
class MyLinkedList
{
public:
struct LinkedNode
{
int val;
LinkedNode* next;
LinkedNode(int val) : val(val), next(nullptr){}
};
MyLinkedList()
{
dummyHead = new LinkedNode(0);
sizeOfNode = 0;
}
int get(int index)
{
if (index > (sizeOfNode - 1) || index < 0)
{
return -1;
}
LinkedNode* cur = dummyHead->next;
while (index--)
{
cur = cur->next;
}
return cur->val;
}
void addAtHead(int val)
{
LinkedNode* newNode = new LinkedNode(val);
newNode->next = dummyHead->next;
dummyHead->next = newNode;
++sizeOfNode;
}
void addAtTail(int val)
{
LinkedNode* newNode = new LinkedNode(val);
LinkedNode* cur = dummyHead;
while (cur->next != nullptr)
{
cur = cur->next;
}
cur->next = newNode;
++sizeOfNode;
}
void addAtIndex(int index, int val)
{
if (index > sizeOfNode)
{
return;
}
LinkedNode* newNode = new LinkedNode(val);
LinkedNode* cur = dummyHead;
while (index--)
{
cur = cur->next;
}
newNode->next = cur->next;
cur->next = newNode;
++sizeOfNode;
}
void deleteAtIndex(int index)
{
if (index >= sizeOfNode || index < 0)
{
return;
}
LinkedNode* cur = dummyHead;
while (index--)
{
cur = cur->next;
}
LinkedNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
--sizeOfNode;
}
void printLinkedList()
{
LinkedNode* cur = dummyHead;
while (cur->next != nullptr)
{
cout << cur->next->val << " ";
cur = cur->next;
}
cout << endl;
}
private:
int sizeOfNode;
LinkedNode* dummyHead;
};