反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL指针
1.定义一个结点指针pCur指向当前链表,再定义一个指针pPre指向前一个结点,初始化为NULL。
2.循环遍历该链表,定义一个临时指针pNext指向当前链表的下一个结点,而后断开当前结点和下一个结点的指针关系,让当前结点的指针pCur的next指向pPre,即完成当前结点的反转。而后前移pPre指针和pCur指针,循环顺序执行该操做。
3.当临时指针pNext为NULL的时候说明pCur指针已经走到该链表的最后一个结点code
ListNode* reverseList(ListNode* head) { ListNode* pPre = NULL; ListNode* pCur = head; while (pCur != NULL) { ListNode* pNext = pCur->next; pCur->next = pPre; pPre = pCur; if (pNext == NULL) { return pCur; } pCur = pNext; } return pCur; }
改进版:blog
ListNode* reverseList(ListNode* head) { ListNode* pPre = NULL; ListNode* pCur = head; ListNode* pNext =NULL; while (pCur != NULL) { pNext = pCur->next; pCur->next = pPre; pPre = pCur; pCur = pNext; } return pPre; }
1.思路很简单就是指针交换肯定好指针交换的顺序就行
2.改进版本的思路仍是同样,只是减小了判断的次数,数据量大的时候时间节约比较明显,小数据量差距不大。
纸上得来终觉浅,绝知此事要躬行
List