题目
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
分析
反转链表的实质是将链表的指针指向反转,我们将链表的指针指向反转就可以实现反转一个单链表。
解决方案
方法一:迭代法
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode*cur=NULL;
while(head)
{
ListNode*temp=head->next;//很关键,需要将head的下一个节点保存,要不然最后节点只有一个
head->next=cur;//指向反转
cur=head;//cur后移
head=temp;//head后移
}
return cur;
}
};
方法二:头插法
新设置一个节点,并将其指向NULL,然后将head中的值一个一个插入到该节点与空之间,最后返回该节点的下一个节点。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode*p=new ListNode(0);
p->next=NULL;
while(head)
{
ListNode*temp=p->next;
ListNode*cur=head->next;
p->next=head;
head->next=temp;
head=cur;
}
return p->next;
}
};
最后还有递归方法,有兴趣可以想一下,与迭代差不多。