题解 | #反转链表#
反转链表
https://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * * @param pHead ListNode类 * @return ListNode类 */ struct ListNode* ReverseList(struct ListNode* pHead ) { // write code here //思路:将原链表头节点变为尾节点,然后将后续节点依次插入在 新!插!入!的节点前面。 //这道题解法应该很多,我采用最不费脑的方法(我的小小的脑容量啊) if (NULL != pHead) { //判断是否为空节点 struct ListNode* newhNode = pHead->next;//成为新链表头节点(临时头节点) struct ListNode* bufNode = pHead->next; //接原链表的next节点 struct ListNode* tailNode = pHead; //新链表的next节点 if (NULL != pHead->next) { //判断是否为单个节点,不需要反转 pHead->next = NULL; while (NULL != bufNode) { //当原链表next节点为NULL时,反转已完成,后续没有需要操作的节点了 newhNode = bufNode; bufNode = bufNode->next; //新的头节点接到后,再移动bufNode至后一个节点 newhNode->next = tailNode; //插入新的头节点(将此节点放在头部) tailNode = newhNode; //更新新链表的next节点,以备新的头节点的插入 } return newhNode; } } return pHead; }#我的2023新年愿望#