实现链表逆序,空间复杂度为O(1)

时间:2022-06-27 17:07:49

一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小,它包括为参数表中形参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分。

#include <iostream>

using namespace std;

struct LinkNode
{
int data;
struct LinkNode* next;
};

LinkNode* ReverseLink(LinkNode* head)
{
//声明三个指向链表节点的指针
struct LinkNode* nowHead = head;
struct LinkNode* sourceLink = head->next;
struct LinkNode* tempNode = NULL; //辅助指针

//进行翻转
while (sourceLink != NULL)
{
tempNode = sourceLink;//先保存链表头节点的下一个节点
sourceLink = sourceLink->next;
tempNode->next = nowHead;
nowHead = tempNode;
}
head->next = NULL;
return nowHead;
}

void PrintLink(struct LinkNode* node)
{
struct LinkNode* pcurrent = node;
while (pcurrent != NULL)
{
printf("%d ", pcurrent->data);
pcurrent = pcurrent->next;
}
printf("\n");
}

void test()
{
struct LinkNode l1 = { 1, NULL };
struct LinkNode l2 = { 2, NULL };
struct LinkNode l3 = { 3, NULL };

l1.next = &l2;
l2.next = &l3;
l3.next = NULL;

struct LinkNode* node = ReverseLink(&l1);

PrintLink(node);
}

int main()
{
test();
return 0;
}