From 7b1646ab62451c944b308c081e018ab7f7c9111e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=A0=91=E6=A3=AE?= <14021051@buaa.edu.cn> Date: Sat, 22 Sep 2018 19:27:37 +0800 Subject: [PATCH] Create 206. Reverse Linked List.md --- 206. Reverse Linked List.md | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 206. Reverse Linked List.md diff --git a/206. Reverse Linked List.md b/206. Reverse Linked List.md new file mode 100644 index 0000000..8e35276 --- /dev/null +++ b/206. Reverse Linked List.md @@ -0,0 +1,63 @@ +# [206. Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/description/) +# 思路 +## 思路一:迭代 +先设置一个头结点List_head,其next指向NULL。然后从待翻转链表中一次取一个节点p出来,将p的next指向List_head的next,List_head的next指向p。 +循环上述操作直到p为NULL。 +## 思路二:递归 +也可以采用递归的方式: +* 递归出口:若head == NULL 或者 head -> next == NULL,直接返回head即可; +* 递归主体:用q记录head的下一个节点,然后令p等于reverseList(q),则p的最后一个非空节点就是q,将q的next令为head,head的next令为NULL,再返回p即可。 + +# C++ +## 思路一 +``` +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * ListNode *next; + * ListNode(int x) : val(x), next(NULL) {} + * }; + */ +class Solution { +public: + ListNode* reverseList(ListNode* head) { + ListNode *List_head = new ListNode(0); + List_head -> next = NULL; + + ListNode *p = head, *tmp; + while(p){ + tmp = p -> next; + p -> next = List_head -> next; + List_head -> next = p; + p = tmp; + } + return List_head -> next; + + } +}; +``` +## 思路二 +``` +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * ListNode *next; + * ListNode(int x) : val(x), next(NULL) {} + * }; + */ +class Solution { +public: + ListNode* reverseList(ListNode* head) { + if(head == NULL || head -> next == NULL) return head; + ListNode *p, *q; + + q = head -> next; + p = reverseList(q); + q -> next = head; + head -> next = NULL; + return p; + } +}; +```