两种方法逆序一个给定的链表
本文介绍两种实现链表逆序的方式,第一种是非递归的方式,第二种是递归的方式。
方法一:非递归的方式
ListNode *reverse(ListNode *head)
{
//为空或只有一个,直接返回即可
if(head == NULL || head->next == NULL)
return head;
ListNode *pre = NULL;
while(head != NULL)
{
ListNode *tmpNode = head->next;
head->next = pre;
pre = head;
head = tmpNode;
}
return pre;
}
方法二:递归解法
ListNode *reverse(ListNode *head)
{
if(head == NULL || head->next == NULL)
return head;
//假如原先是head->node1->node2->node3->node4
//那么执行下面一步后变为head->node1<-node2<-node3<-node4
ListNode *newHead = reverse(head->next);
//下面两行是将head执行node1,变为node1->head->NULL
head->next->next = head;
head->next = NULL;
return newHead;
}