题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
思路
1.递归
2.建立虚拟头结点(为了不对head进行特殊处理),类似两数相加
实现
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
ListNode* res = new ListNode(0);
res->next = head;
ListNode* post;
ListNode* pre = res;
while (head !=NULL && head->next != NULL) {
post = head->next;
head->next = post->next;
post->next = head;
pre->next = post;
pre = head;
head = head->next;
}
return res->next;
}
};