删除链表中重复元素
https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/description/?envType=study-plan-v2&envId=top-interview-150
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if(!head)
{
return head;
}
ListNode *dummynode = new ListNode(-1);
dummynode->next = head;
ListNode *pre = dummynode;
while(head)
{
cout << head->val << endl;
if(head->next && head->val == head->next->val)
{
int x = head->val;
while(head->next &&head->next->val == x)
{
head->next = head->next->next;
}
pre->next = head->next;
head = pre->next;
continue;
}
pre = head;
head = head->next;
}
return dummynode->next;
}
};
旋转链表
https://leetcode.cn/problems/rotate-list/?envType=study-plan-v2&envId=top-interview-150
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* rotateRight(ListNode* head, int k) {
if(!head)
{
return head;
}
ListNode *dummynode = new ListNode(-1);
int length = 0;
dummynode->next = head;
ListNode *lastnode;
while(head)
{
lastnode = head;
head = head->next;
length ++;
}
if(k % length == 0)
{
return dummynode->next;
}
int n = length - k % length;
head = dummynode;
for(int i = 0;i < n;i ++)
{
head = head->next;
}
lastnode->next = dummynode->next;
dummynode->next = head->next;
head->next = nullptr;
return dummynode->next;
}
};
分隔链表
https://leetcode.cn/problems/partition-list/?envType=study-plan-v2&envId=top-interview-150
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* partition(ListNode* head, int x) {
ListNode* small = new ListNode(0), * large = new ListNode(0);
ListNode* smallhead = small,*largehead = large;
while(head)
{
if(head->val < x)
{
small->next = head;
small = small->next;
}
else
{
large->next = head;
large = large->next;
}
head = head->next;
}
large->next = nullptr;
small->next = largehead->next;
return smallhead->next;
}
};