24.两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1 -> 2 -> 3 -> 4,你应该返回 2 -> 1 -> 4 -> 3.
来源:力扣(LeetCode)
链接:link
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:进行一次循环,每次循环中对一对奇偶节点进行交换。
C++源码:
/**
* 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* H = new ListNode(0);
H->next = head;
ListNode* preNode = H;
while(head && head->next)
{
//保存要交换的两个节点
ListNode* firstNode = head;
ListNode* secodNode = head->next;
//进行交换,注意交换的顺序不可以颠倒
preNode->next = secodNode;
firstNode->next = secodNode->next;
secodNode->next = firstNode;
//对头节点和前驱节点重新赋值
preNode = firstNode;
head = preNode->next;
}
return H->next;
}
};