题目:
解答:
可以使用递归方式和循环方式两种求解,代码如下
代码:
/**
* 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) return NULL;
ListNode* t = new ListNode(-1);
t->next = head;
ListNode* p = t;
while(p->next != NULL && p->next->next != NULL){
ListNode* first = p->next;
p->next = first->next;
ListNode* second = p->next->next;
p->next->next = first;
first->next = second;
p = first;
}
head = t->next;
free(t);t = NULL;
return head;
}
// 递归形式
ListNode *swapPairs(ListNode *head) {
if( head == NULL || head -> next == NULL ) return head;
ListNode *temp = head -> next;
head -> next = swapPairs(temp -> next);
temp -> next = head;
return temp;
}
};
更新会同步在我的网站更新(https://zergzerg.cn/notes/webnotes/leetcode/index.html)