链表的反转

链表的反转

题目:定义一个函数,输入一个链表的头节点,反转该链表并返回反转后链表的头节点,链表的定义如下:

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 }

 

posted @ 2016-04-24 23:41 General_up 阅读(...) 评论(...) 编辑 收藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章