题解 | #反转链表#
反转链表
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新年愿望#