反转单链表。假设单链表的数据结构定义如下:
typedef struct LNode
{
int data;
struct LNode *next;
}LNode, *LinkedList;
方法一:使用三个指针遍历单链表,逐个链接点进行反转。
一个结点记录当前遍历的结点,一个结点记录前一个结点,一个结点记录下一个结点。
Node* ReverseList1(Node *Ptr)
{
Node *pre = NULL;
Node *Current = Ptr;
Node *pnext = NULL;
while ( Current != NULL){
pnext = Current->next;
Current->next = pre;
pre = Current;
Current = pnext;
}
return pre;
}
方法二:(递归)
递归的实现方式主要有4步:
1)如果head为空,或者只有head这一个节点,return head即可;
2)先遍历head->next为首的链表,得到一个头结点newHead;
3)把head赋值给head->next->next, head->next为空;
4)返回newHead。
代码:
node* reverseList2(node* head)
{
if(head == NULL || head->next == NULL)
return head;
node* newHead = reversedList2(head->next);
head->next->next = head;
head->next = NULL;
return newHead;
}