Description:
Given a linked list, swap every two adjacent nodes and return its head.
Note:
For example,
Given 1->2->3->4
, you should return the list as 2->1->4->3
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
Solution:
Analysis and Thinking:
题目意思为输入一个链接链表,交换任意两个相邻节点,最后返回头结点。这里采用递归的思想解决
Steps:
step 1:判断头结点是否为空或者链表是否为空,若是,直接返回
step 2:创建新的结果头结点,指向当前链表第一个元素
step 3:头结点的next指针后移,指向结果头结点的下一个结点
step 4:作当前相邻两个结点的交换
step 5:递归到下一个未作交换的节点
Codes:
class Solution {
public:
ListNode *swapPairs(ListNode *head) {
if(head == NULL || head->next ==NULL)
return head;
ListNode* result = head->next;
head->next = result->next;
result->next = head;
result->next->next = swapPairs(result->next->next);
return result;
}
};
Results: