题意:
链表中的相邻2个元素翻转一下。
思路:
用3个指针,其中两个指向要反转的元素f1和f2,还有一个指向答案的最后一个元素ans。
不断做f1.next = f2.next; f2.next = f1; ans.next = f2; ans = f1;
代码:
/**
* 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 *ans, *bef, *f1, *f2;
f1 = head;
f2 = head->next;
f1->next = f2->next;
f2->next = f1;
ans = f2;
bef = f1;
for (f1 = bef->next; f1 != NULL; f1 = bef->next) {
f2 = f1->next;
if (f2 == NULL) {
break;
}
f1->next = f2->next;
f2->next = f1;
bef->next = f2;
bef = f1;
}
return ans;
}
};