反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
久违了。由于现实需要,从现在开始捡起来很久没用的C/C++来编写代码。
这一题之前做过,但是由于使用了较为生疏的语言有些细节没掌握明白。
思路比较简单,迭代的做法,假设链表: 1-> 2 -> 3 ->4 -> NULL
假设curr指针指向1,设置prev指针为NULL,当curr不为NULL时,进行循环。
1.使用局部变量 指针tmp 来保存curr->next的位置 ,此时tmp指向 2
2.设置curr->next 为prev,即 链表变为 NULL <- 1 -> 2 -> 3 -> 4 -> NULL
3.设置prev 为 curr, 则此时 prev指向 1,新链表的头部
4.设置 curr 为 prev, curr指向2,按照原链表的顺序循环下去
代码如下:
class Solution { public: ListNode* reverseList(ListNode* head) { if(!head) return head; ListNode* prev = new ListNode(NULL); ListNode* curr = head; while(curr) { ListNode* tmp = curr->next; curr->next = prev; prev = curr; curr = tmp; } return prev; } };