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;
}
}
本文介绍了一种在链表中两两交换节点的算法实现,提供了两种方法:使用双指针迭代和递归方式。通过调整指针的next属性完成节点的交换,适用于计算机科学与数据结构的学习。
4374

被折叠的 条评论
为什么被折叠?



