24.两两交换链表中的节点
使用双指针
两个指针交错一个节点;
这样在两个指针间进行交换
利用交叉错位,进行转换改变的是指针next
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head) {
struct ListNode *p, *q, ret;
ret.next = head;
p = &ret;
q = head;
while (q && q->next) {
p->next = q->next;
q->next = p->next->next;
p->next->next = q;
p = q;
q = q->next;
}
return ret.next;
}
递归
struct ListNode* swapPairs(struct ListNode* head) {
struct ListNode *p, *q;
if (head != NULL && head->next != NULL) {
p = head->next;
q = swapPairs(p->next);
p->next = head;
head->next = q;
return p;
} else {
return head;
}
}