原地旋转链表
2020-04-09 本文已影响0人
SK_Wang
设计一个算法,将链表中所有节点的链接方向"原地旋转",即要求仅仅利用原表的存储空间. 换句话说,要求算法空间复杂度为O(1);
要求:
- 算法空间复杂度为O(1)
示例:
输入:0->2->4->6->8->10
输出:10->8->6->4->2->0
解题思路:
要求算法空间复杂度为O(1),即不能开辟新的空间,只能考虑改变指针指向,参考前插法的思想。
复杂度分析:
- 空间复杂度 O(1)
代码:
typedef struct Node{
int data;
struct Node *next;
} Node;
typedef struct Node * LinkList;
void Inverse(LinkList *L) {
LinkList p, temp;
p = (*L)->next;
(*L)->next = NULL;
while (p) {
temp = p->next;
p->next = (*L)->next;
(*L)->next = p;
p = temp;
}
}