/**
* 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) {
if(head == NULL || head->next == NULL)
return head;
ListNode *trueHead = head->next;
ListNode *temp1 = head->next;
head->next = head->next->next;
temp1->next = head;
while(true)
{
if(head->next == NULL || head->next->next == NULL)
return trueHead;
ListNode *pre = head;
head = head->next;
temp1 = head->next;
pre->next = head->next;
head->next = head->next->next;
temp1->next = head;
}
}
};
题目很简单,主要的障碍可能集中在,需要区别对待前两个节点和后面节点的处理,
第一个节点由于没有节点指向它,因此直接交换1、2节点的next指向就行,而后面的节点,由于每一个都有前继节点,需要前继节点
的next指向也需要改变