Reverse Linked List
在leetcode上看到了一道很常见的面试题,反转单链表。想着随便写写肯定就能过,没想到踩了很多坑,往往面试中就是因为这些边界条件没处理好而被拒绝。
首先要建一个空节点用来存反转后的结尾,否则会形成循环链表,运行超时。其次cur指针指向链表的结尾的最后一个元素时,要记得反转。可以在cur改变前反转一次,cur改变后反转一次,即一次循环里两次反转,或者在循环结束后处理最后一个节点。总之就是要特别处理好头和尾的问题,还有指针越界的问题。
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 ListNode *pre =NULL, *cur = head, *next = head; 13 if(head == NULL || head->next == NULL) 14 return head; 15 next = next->next; 16 while(next) 17 { 18 cur->next = pre; 19 pre = cur; 20 cur = next; 21 next = next->next; 22 //cur->next = pre; 23 } 24 cur->next = pre; 25 return cur; 26 } 27 };

浙公网安备 33010602011771号