上代码:
1. 算法复杂度O(n2)
int LinkedList_Reverse(LinkedList* list)//o(n2)
{
TLinkedList *sList = (TLinkedList*)list;
int length = sList->length;
int i = 0;
LinkedListNode *p, *q;
LinkedListNode *pnew, *head;
int ret = (sList!=NULL);
if (ret)
{
head = ((LinkedListNode*)sList)->next;
for (i = 0; i < length; i++)
{
p = q = head;
while (p->next)//每次循环找到最后一个结点,p指向最后一个结点,q指向倒数第二个结点
{
q = p;
p = p->next;
}
if (i == 0)
{
sList->head.next = pnew = p;
}
else
{
pnew = pnew->next = p;
}
q->next = NULL;
}
}
return ret;
}
2. 1. 算法复杂度O(n)
int LinkedList_Reverse2(LinkedList* list)//o(n)
{
TLinkedList *sList = (TLinkedList*)list;
LinkedListNode *p, *q, *head;
int ret = (sList != NULL);
head = ((LinkedListNode*)sList)->next;
if (ret)
{
if (head->next)
{
p = head;
q = p->next;
p->next = NULL;//将首元素变为末端元素
while(q)
{
p = q;
q = q->next;
p->next = head;
head = p;
}
}
}
sList->head.next = head;
return ret;
}