1. 题目链接: 203.移除链表元素
个人题解如下:使用添加一个虚拟节点dummyhead,可以统一处理方式。
class Solution
{
public:
ListNode* removeElements(ListNode* head, int val)
{
ListNode* dummyhead = new ListNode;
dummyhead->next = head;
ListNode* cur = dummyhead;
while (cur->next != NULL)
{
if (cur->next->val == val)
{
ListNode* tmp = cur->next;
cur->next = cur->next->next;
delete tmp;
}
else
{
cur = cur->next;
}
}
head = dummyhead->next;
delete dummyhead;
return head;
}
};
2. 题目链接: 707.设计链表
个人题解如下:对个人来说,难的是链表的定义,只要定义好,后面就好办了。
class MyLinkedList {
public:
struct LinkedNode
{
int val;
LinkedNode* next;
LinkedNode(int val):val(val),next(nullptr){};
};
private:
int size;
LinkedNode *dummyHead;
public:
MyLinkedList()
{
dummyHead = new LinkedNode(0);
size = 0;
};
int get(int index)
{
if ((index + 1) > size)
{
return -1;
}
int i = 0;
LinkedNode * cur = dummyHead->next;
while (cur != NULL)
{
if (i == index)
{
return cur->val;
}
else
{
cur = cur->next;
i ++;
}
}
return -1;
};
void addAtHead(int val)
{
LinkedNode* newNode = new LinkedNode(val);
newNode->next = dummyHead->next;
dummyHead->next = newNode;
size ++;
};
void addAtTail(int val)
{
LinkedNode* newNode = new LinkedNode(val);
LinkedNode * cur = dummyHead;
while (cur->next != NULL)
{
cur = cur->next;
}
cur->next = newNode;
newNode->next = NULL;
size ++;
};
void addAtIndex(int index, int val)
{
if (index > size)
{
return;
}
if (index == size)
{
addAtTail(val);
return;
}
LinkedNode* newNode = new LinkedNode(val);
LinkedNode * cur = dummyHead;
int i = 0;
while (cur->next != NULL)
{
if (i == index)
{
newNode->next = cur->next;
cur->next = newNode;
size ++;
return;
}
cur = cur->next;
i ++;
}
};
void deleteAtIndex(int index)
{
if ((index + 1) > size)
{
return;
}
LinkedNode * cur = dummyHead;
int i = 0;
while (cur != NULL)
{
if (i == index)
{
LinkedNode * del = cur->next;
cur->next = cur->next->next;
delete del;
size --;
return;
}
cur = cur->next;
i ++;
}
};
};
3. 题目链接: 206.反转链表
个人题解如下:后一个节点的next指向前一个节点。
class Solution
{
public:
ListNode* reverseList(ListNode* head)
{
if (head == NULL)
{
return head;
}
ListNode* p1 = NULL;
ListNode* p2 = head;
ListNode* p3 = head->next;
if (p3 == NULL)
{
p2->next = p1;
p1 = p2;
}
while (p3 != NULL)
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
return p1;
}
};