反转单链表

1. 题目形容

输出一个链表,反转链表后,输入新链表的表头。

2. 示例

3. 解题思路

输出的链表头指针为None或者整个链表只有一个结点时,反转后的链表呈现断裂,返回的翻转之后的头节点不是原始链表的尾结点。因而须要引入一个翻转后的头结点,以及一个指向以后结点的指针,一个指向以后结点前一个结点的指针,一个指向以后结点后一个结点的指针,防止出现断裂。

递归反转链表实现,绝对比拟容易一些

4. Java实现

比较简单的非递归的实现办法:
/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class Solution {    public ListNode ReverseList(ListNode head) {        // 如果是head为空,或者只有一个节点,则间接返回        if (head == null || head.next == null){            return head;        }        ListNode p = head;        ListNode newHead = null; // 新的头节点                while(p != null){            ListNode temp = p.next; // 保留p指向下一个节点的指针            p.next = newHead;            newHead = p; // 更新头节点            p = temp;  // 即 p = p.next ,更新p节点        }        return newHead;            }}
应用递归的实现办法:
/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class Solution {    public ListNode ReverseList(ListNode head) {        // 应用递归的办法        if (head == null || head.next == null){            return head;        }        ListNode headNext = ReverseList(head.next);        head.next.next = head;        head.next = null;        return headNext;     }}

5. Python实现

比较简单的非递归的实现办法:
#!/usr/bin/env python# -*- coding: utf-8 -*-"""__title__ = ''__author__ = 'mike_jun'__mtime__ = '2019-5-24'#目标: 反转单链表"""def reverseLink(head):    #pass    if not head or not head.next:        return head    p = head    newHead = None    while p:        temp = p.next        p.next = newHead        newHead = p        p = temp    return newHead #创立一个单链表class Node():    def __init__(self, values):        self.next = None        self.values = values node1 = Node(1)node2 = Node(2)node3 = Node(3)node4 = Node(4)node1.next = node2node2.next = node3node3.next = node4 def printNode(head):    result = []    while head:        result.append(head.values)        head = head.next    print(result)printNode(node1)newNode = reverseLink(node1)printNode(newNode)
应用递归的实现办法:
/*pythonpublic class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*/public class Solution {    public ListNode ReverseList(ListNode head) {        // 应用递归的办法        if (head == null || head.next == null){            return head;        }        ListNode headNext = ReverseList(head.next);        head.next.next = head;        head.next = null;        return headNext;     }}
如果您感觉本文有用,请点个“在看”