题目描述
输入样例
[1,2,3,4]
输出样例
[1,4,3,2]
算法1:递归
时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1)
采用递归的方法进行解题,每次找到当前倒数第二个链表节点,然后让当前头结点指向它,每处理完两个节点,就递归后面的节点,进行同样的操作即可。
C++ 代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void rearrangedList(ListNode* head) {
if(!head || !head->next || !head->next->next)
return;
ListNode *p=head; //指针p用于找到倒数第二个节点
while(p->next->next)
p=p->next;
p->next->next=head->next; //最后一个节点指向当前节点的下一个
head->next=p->next; //当前头结点指向最后一个节点
p->next=NULL; //倒数第二个节点指向NULL
rearrangedList(head->next->next); //处理完2个节点,递归后面的节点
}
};