两两交换链表的结点
程序员文章站
2022-05-06 11:01:24
...
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
迭代法
/**
* 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 *dummy = new ListNode(0);
ListNode * preNode = dummy;
preNode->next = head;
while(head && head->next)
{
// Nodes to be swapped
ListNode *firstNode = head;
ListNode *secondNode = head->next;
// Swapping
preNode->next = secondNode;
firstNode->next = secondNode->next;
secondNode->next = firstNode;
//for next swap
preNode = firstNode;
head = firstNode->next;
}
return dummy->next;
}
};