题目:输入一个链表,反转链表后,输出新链表的表头。
代码:
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 12 ListNode* ReverseList(ListNode* phead) { 13 if ( phead == NULL ) 14 return NULL; 15 else{ 16 ListNode *pre = NULL, *cur = phead, *temp = NULL; 17 while( cur != NULL){ 18 temp = cur->next; 19 cur->next = pre; 20 pre = cur; 21 cur = temp; 22 } 23 return pre; 24 } 25 } 26 };
我的笔记:temp 用来记录 当前结点的后继,pre 用来记录当前节点的前驱。实现反转,结束后将整体向后移一位,使得 pre 指向当前结点,cur 指向之前记录的后继。链表详解可见https://www.cnblogs.com/john1015/p/12933625.html