问题:反转单链表
输入:ListNode* head
输出:ListNode* head
思路:没有思路,只好看solution,学习一下。链表真的头大,指来指去。
做链表类题目的关键是画图,将链表指针指向的内存的变化用图表示出来。
设置虚拟头节点。头节点(head)常要特殊处理,因为head节点没有前一个节点。通过在head节点前加一个虚拟节点,便可用正常的方法。
每次循环,将箭头指向左边的节点,且改变pre和cur。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* prev=NULL;
ListNode* curr=head;
while(curr!=NULL)
{
ListNode* nextTemp=curr->next;
curr->next=prev;
prev=curr;
curr=nextTemp;
}
return prev;
}
};