-
题目
交换单链表节点(没有头节点) -
思路
(1)逐步遍历,相邻交换
注意节点为空的情况,包括头节点为空和更新节点为空两种。
(2)递归思路(leetcode官方)
a->b->c:b节点做新的头节点,a节点指向从c节点得到的交换链表,b节点指向a节点。 -
代码
(1)第一种思路代码
ListNode* swapPairs(ListNode* head) {
if(head == nullptr)
return head;
ListNode *p = head, *q = head->next;
while(p && q) {
int t = p->val;
p->val = q->val;
q->val = t;
p = q->next;
if(q->next!=nullptr)
q = q->next->next;
else
break;
}
return head;
}
(2)第二种思路代码
ListNode* swapPairs(ListNode* head) {
if (head == nullptr || head->next == nullptr) {
return head;
}
ListNode* newHead = head->next;
head->next = swapPairs(newHead->next);
newHead->next = head;
return newHead;
}