[LeetCode 206] Reverse Linked List 翻转单链表

本题要求将给定的单链表翻转,是校招面试手撕代码环节的高频题,能很好地考察对单链表这一最简单数据结构的理解;可以使用迭代和递归两种方法对一个给定的单链表进行翻转,具体实现如下:
 
 1 class Solution {
 2 public:
 3     ListNode* reverseList(ListNode* head) {
 4         return reverseList_iteratively(head);
 5        //return reverseList_recursively(head);//递归方法leetcode超时
 6     }
 7 //迭代 
 8     ListNode* reverseList_iteratively(ListNode* head)
 9     {
10         ListNode* p = nullptr;
11         ListNode* w = nullptr;
12         while(head)
13         {
14             p = head->next;
15             head->next = w;
16             w = head;
17             head = p;
18         }
19         return w;
20     }
21  
22 //递归
23      ListNode* reverseList_recursively(ListNode* head)
24     {
25         if(head==nullptr||head->next==nullptr)
26         {
27             return head;
28         }
29         ListNode* h = reverseList_recursively(head->next);
30         head->next->next=head;//加入反转后的单链表尾部
31         head = nullptr;
32         return h;
33     }
34 };

 

你可能感兴趣的:([LeetCode 206] Reverse Linked List 翻转单链表)