class Solution {
public:
ListNode* swapPairs(ListNode* head)
{
ListNode* env = new ListNode();
env->next = head;
ListNode* cur = env;
while (cur->next != nullptr && cur->next->next != nullptr)
{
ListNode* tmp = cur->next;
ListNode* tmp1 = cur->next->next->next;
cur->next = cur->next->next;
cur->next->next = tmp;
cur->next->next->next = tmp1;
cur = cur->next->next;
}
return env->next;
}
};
想到用双指针后解题就很容易,总结出一个规律,像链表这种无法直接找到最后一个结点,但题目又明确要求从后面开始,应该都可以用双指针来解决,不知道这个规律对不对,多刷刷题试一下。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n)
{
ListNode* venv = new ListNode();
venv->next = head;
ListNode* cur = venv;
ListNode* cur1 = venv;
while (cur != nullptr && cur->next != nullptr)
{
cur = cur->next;
if (n <= 0)
{
cur1 = cur1->next;
}
n--;
}
cur1->next = cur1->next->next;
return venv->next;
}
};
很考验对题目的理解程度,想不到方法根本就做不下去,不看题解想不到方法。