给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
说明:
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:定义三个指针prev, cur, next。注意next指针在迭代时值的变化。
/** * 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 || !head->next) return head; ListNode* dummy = new ListNode(-1); dummy->next = head; for(ListNode* prev=dummy, *cur=prev->next, *next=cur->next; cur; prev=cur, cur=cur->next, next=cur?cur->next:nullptr) { prev->next = next; cur->next = next->next; next->next = cur; } return dummy->next; }};