第一种思路,比较冗杂
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* guard = (struct ListNode*)malloc(sizeof(struct ListNode));
guard->next = NULL;
struct ListNode* cur, * tail, * tmp;
cur = tail = head;
while (cur)
{
if (tail == head)
{
guard->next = tail;
cur = cur->next;
tail->next = NULL;
}
else
{
guard->next = tail;
cur = cur->next;
tail->next = tmp;
}
tmp = tail;
tail = cur;
}
return guard->next;
free(guard);
}
第二种思路
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* rhead, * cur, * next;
rhead = NULL;
cur = next = head;
while (cur != NULL)
{
next = cur->next;
cur->next = rhead;
rhead = cur;
cur = next;
}
return rhead;
}
第三种,较优
struct ListNode* reverseList(struct ListNode* head)
{
if (head == NULL)
{
return NULL;
}
struct ListNode* n1, * n2, * n3;
n1 = NULL;
n2 = head;
n3 = n2->next;
while (n2)
{
n2->next = n1;
n1 = n2;
n2 = n3;
if (n3 != NULL)
n3 = n3->next;
}
return n1;
}