Leetcode题解-24. Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
思路
仔细看这道题,其实只是第一二个节点、第三四个节点交换节点。
思路1:交换节点只进行交换值的操作,不对链表进行什么操作,只需要两个额外指针。
思路2:交换节点就是真的对链表进行操作,因此需要三个额外的指针进行标记。
需要注意的点是判断节点是否为空,防止对空指针进行操作
代码
思路1
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* first = head;
if(!head) return nullptr;
ListNode* second = head->next;
while(second){
if(!first) break;
int temp = first->val;
first->val = second->val;
second->val = temp;
first = second->next;
if(first) second = first->next;
}
return head;
}
};
思路2
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode pre(-1); pre.next = head;
ListNode* prenode = ⪯
ListNode* first = head;
if(!head) return nullptr;
ListNode* second = head->next;
while(second){
if(!first) break;
first->next = second->next;
second->next = first;
prenode->next = second;
prenode = first;
first = first->next;
if(first) second = first->next;
}
return pre.next;
}
};