206.反转链表

1.题目形容

<p>反转一个单链表。</p><br/><p>示例:</p><br/><pre>输出: 1->2->3->4->5->NULL<br/>输入: 5->4->3->2->1->NULL</pre><br/><p>进阶:
<br/>你能够迭代或递归地反转链表。你是否用两种办法解决这道题?</p><br/>

2.解题报告

思路1:借助栈

利用栈先进后出的特点,将每个节点按程序存入栈中,再从顶到底连贯栈中的每个节点
留神要将翻转后的最初一个节点(即原链表的第一个节点)的next置为nullptr,不然结果可想而知~

思路2:就地操作(举荐)

一一断开原链表的每个节点(保留下个节点)
将断开的节点连贯到反转链表的表头上
更新反转链表的表头
回到原链表的下个节点

3.最优答案

c答案

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     struct ListNode *next; * }; *///struct ListNode* reverseList(struct ListNode* head) {//    struct ListNode* new = NULL;//    while(head) {//        struct ListNode* temp = head;//        head = head->next;//        temp->next = new;//        new = temp;//    }//    return new;//}struct ListNode* reverseList(struct ListNode* head) {    if (!head || !head->next) return head;    struct ListNode *L = reverseList(head->next);    head->next->next = head;    head->next = NULL;    return L;}

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) {        if (!head || !head->next) return head;                ListNode *node = reverseList(head->next);        head->next->next = head;        head->next = NULL;                return node;    }};

java答案

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class DIYStack{    public ArrayList<Integer> container = new ArrayList<>();    public void comeIn(int item){        container.add(item);    }    public int comeOut(){        return container.remove(container.size()-1);    }}class Solution {    public ListNode reverseList(ListNode head) {        DIYStack diyStack = new DIYStack();        ListNode tmp = head;        while (tmp != null){            diyStack.comeIn(tmp.val);            tmp = tmp.next;        }                tmp = head;        while (tmp != null) {            tmp.val = diyStack.comeOut();            tmp = tmp.next;        }        return head;    }}

JavaScript答案

/** * Definition for singly-linked list. * function ListNode(val) { *     this.val = val; *     this.next = null; * } *//** * @param {ListNode} head * @return {ListNode} */var reverseList = function(head) {    var cur = head;    var prev = null;    while(cur){        var next = cur.next;        cur.next = prev;        prev = cur;        cur = next;    }    return prev;};

c#答案

/** * Definition for singly-linked list. * public class ListNode { *     public int val; *     public ListNode next; *     public ListNode(int x) { val = x; } * } */public class Solution {    public ListNode ReverseList(ListNode head) {                ListNode b = null;        ListNode Nextindex;        while(head != null)        {            Nextindex = head.next;            head.next = b;            b=head;            head = Nextindex;        }        return b;    }}

python2.x答案

# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    def reverseList(self, head):        """        :type head: ListNode        :rtype: ListNode        """        if head is None or head.next is None:            return head        stack = []        while head:            stack.append(head)            head = head.next        newHead = stack[-1]        # while stack:        #     now = stack.pop()        for i in range(len(stack) - 1, 0, -1):            stack[i].next = stack[i - 1]        stack[0].next = None        return newHead

python3.x答案

# Definition for singly-linked list.# class ListNode:#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution:    def reverseList(self, head):        """        :type head: ListNode        :rtype: ListNode        """        if head is None:            return None        if head.next is None:            return head        p = head        q = None        while p:            tmp = p.next            p.next = q            q = p            p = tmp        return q                    

go答案

/** * Definition for singly-linked list. * type ListNode struct { *     Val int *     Next *ListNode * } */func reverseList(head *ListNode) *ListNode {    var preNode *ListNode = nil    var currentNode *ListNode = head        for currentNode != nil {        nextNode := currentNode.Next                currentNode.Next = preNode                preNode = currentNode                currentNode = nextNode    }    return preNode    }

4.leetcode解题报告合集

leetcode最佳答案:
leetcode是练习算法能力修炼编程内功十分好的平台,然而官网上解题报告不全,网上的答案也有对有错,为了晋升大家刷题的效率,现将每个题目的各种语言的答案(通过测试)总结公布进去,供大家参考。每个题目蕴含c、c++、java、 python、 python3、 javascript、 c#、 go 8种常见语言的答案。