原地旋转链表

2020-04-09  本文已影响0人  SK_Wang

设计一个算法,将链表中所有节点的链接方向"原地旋转",即要求仅仅利用原表的存储空间. 换句话说,要求算法空间复杂度为O(1);

要求:

示例:

输入:0->2->4->6->8->10
输出:10->8->6->4->2->0

解题思路:

要求算法空间复杂度为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;
    }
}

上一篇下一篇

猜你喜欢

热点阅读