题目:定义一个函数,输入一个链表的头节点,反转该链表并返回反转后链表的头节点,链表的定义如下:
struct ListNode{
int value;
ListNode* next;
};
链表反转的过程中要防止链表的断裂,假设每次都必须保存当前扫描节点的上一个结点,和下一个节点,不停的扫描此节点是否为nullptr,在循环中每次都定义一个临时的结点来保存,当前结点的下一个节点,然后在循环中判断此临时节点是否为空,若为空,则证明,此节点就是要找的最后要作为的头节点,否则的话,把当前结点的next指向上一个结点,然后此结点又作为新的上一个结点,把临时的节点赋给当前结点,重新的循环。跳出循环后返回最后一个结点。
1 struct ListNode{ 2 int value; 3 ListNode *next; 4 }; 5 ListNode* ReverseList1(ListNode* phead) 6 { 7 ListNode* Node = phead;//当前检测的结点 8 ListNode* PreNode = nullptr;//当前结点的上一个结点 9 ListNode* ReHeadNode= nullptr;//最终要会返回的头结点 10 while (Node != nullptr) 11 { 12 ListNode* TempNext = Node->next;//临时结点,用来保存下一位置 13 if (TempNext == nullptr)//若下一位置为空,证明此结点就是要返回的头结点 14 ReHeadNode = Node; 15 Node->next = PreNode;//指针反转 16 PreNode = Node;//当前结点作为新的上一结点 17 Node = TempNext;//当前结点跳到下一位置,继续检测 18 } 19 return ReHeadNode;//返回头结点 20 }