206. 反转链表
难度:Easy
题目描述:
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解题思路:
方法一:头插法
虚拟一个新的头部结点dummy,然后不断的将head指向的结点插入到dummy结点后面。
注意dummy->next要置空,不要直接指向head。
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* dummy = new ListNode(0);
dummy->next = NULL;
while(head){
ListNode* temp = head->next;
head->next = dummy->next;
dummy->next = head;
head = temp;
}
return dummy->next;
}
};
方法二:依次改变指针方向
采用pre记录前一个结点,now指向当前结点,依次使当前结点的下一个指向前一个结点
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* pre = NULL;
ListNode* now = head;
ListNode* temp;
while(now){
temp = now->next;
now->next = pre;
pre = now;
now = temp;
}
return pre;
}
};