您的位置:首页 > 其它

单链表的反转

2016-06-26 11:07 239 查看
反转单链表。假设单链表的数据结构定义如下:  

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: