struct ListNode
{
int key;
ListNode* next;
};
1.使用三个指针遍历单链表,逐个链接点进行反转
ListNode* ReverseList(ListNode* head)
{
ListNode* p;
ListNode* q;
ListNode* r;
if (head == NULL || head->next == NULL)
return head;
p = head;
q = p->next;
p->next == NULL;
while (q != NULL)
{
r = q->next;
q->next = p;
p = q;
q = r;
}
return p;
}
ListNode* Reverse(ListNode* head)
{
ListNode* pNode = head;
ListNode* pPrev = NULL;
while (pNode != NULL)
{
ListNode* pNext = pNode->next;
if (pNext == NULL)
{
return pNode;
}
pNode->next = pPrev;
pPrev = pNode;
pNode = pNext;
}
}
2.从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。
ListNode* ReverseList(ListNode* head)
{
ListNode* pNode;
ListNode* pNext;
if (head==NULL || head->next==NULL)
return head;
pNode = head->next;
pNext = pNode->next;
while (pNext != NULL)
{
pNode->next = pNext->next;
pNext->next = head->next;
head->next = pNext;
pNext = pNode->next;
}
pNode->next = head;
pNext = head->next;
head->next = NULL;
return pNext;
}