リバースリスト(反復および再帰的なソリューション)

トピック:単独リンクリストを逆にします。

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

最初の反復解法:

struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
	ListNode* reverseList(ListNode* head) {
		ListNode* next = nullptr;
		ListNode* pre = nullptr;
		while (head != nullptr) {
			next = head->next;
			head->next = pre;
			pre = head;
			head = next;
		}
		return pre;
	}
};

要約

  • 現在ヘッドノードセーブ次のノード(現在のヘッドノード2、ノード3は、最初に保存)であります

  • (現在のヘッドノード(「ノード」)ノード1に2点)ヘッドノードの次のノードに現在のポイント「ノード」は、このステップは反転するためのものです

  • (ノード2は、「ノード」に設定されている)、「ノード」、現在のヘッドノードを設定します

  • 次のノードは、「ヘッドノード」(ノード3「ヘッドノード」に設定されている)に配置されたセーブ

二再帰的なソリューション

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
 	//递归解法,重点是明白reverseList函数的作用是什么,并且相信他一定能完成。
    ListNode* reverseList(ListNode* head) {
        if(head==NULL || head->next==NULL){
            return head;
        }
        ListNode *cur = reverseList(head->next);
        head->next->next = head;
        head->next = NULL;
        return cur;
    }
};
公開された59元の記事 ウォン称賛15 ビュー1591

おすすめ

転載: blog.csdn.net/weixin_43867777/article/details/104579718