剑指24: 反转链表
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
没有什么聪明的办法,关键在于保证链表不要断开,同时处理链表只有一个头或者直接为空指针的情况,此外最后返回的应该是原链表的尾。
注意处理原链表头的next指针,修改为nullptr。
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* reverseList(ListNode* head) { 12 if(head==nullptr || head->next==nullptr) 13 return head; 14 ListNode *curptr, *nextptr, *nextnextptr; 15 curptr=head; 16 nextptr=head->next; 17 nextnextptr=nextptr->next; 18 head->next=nullptr; 19 while(nextnextptr!=nullptr){ 20 nextptr->next=curptr; 21 curptr=nextptr; 22 nextptr=nextnextptr; 23 nextnextptr=nextnextptr->next; 24 } 25 nextptr->next=curptr; 26 return nextptr; 27 } 28 };