美文网首页
4.链表反转

4.链表反转

作者: HAO延WEI | 来源:发表于2020-04-25 11:34 被阅读0次

python实现单链表的反转

递归实现

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None


def recurse(head, newhead):  # 递归,head为原链表的头结点,newhead为反转后链表的头结点
    if head is None:
        return
    if head.next is None:
        newhead = head
    else:
        newhead = recurse(head.next, newhead)
        head.next.next = head
        head.next = None
    return newhead

if __name__ == '__main__':

    head = ListNode(1)  # 测试代码
    p1 = ListNode(2)  # 建立链表1->2->3->4->None
    p2 = ListNode(3)
    p3 = ListNode(4)

    head.next = p1
    p1.next = p2
    p2.next = p3
    newhead = None

    p = recurse(head, newhead)  # 输出链表4->3->2->1->None
    print(p)
    while p:
        print p.val
        p = p.next

迭代方法,通过声明一个头指针进行节点与节点之间的链接

class Node(object):
    def __init__(self, elem, next_=None):
        self.elem = elem
        self.next = next_


def reverseList(head):
    if head == None or head.next == None:  # 若链表为空或者仅一个数就直接返回
        return head
    pre = None
    while (head != None):
        next = head.next  # 1
        head.next = pre  # 2
        pre = head  # 3
        head = next  # 4
    return pre


if __name__ == '__main__':
    l1 = Node(1)  # 建立链表3->2->1->9->None
    l1.next = Node(2)
    l1.next.next = Node(3)
    l1.next.next.next = Node(4)
    l = reverseList(l1)
    print(l1)
    print(l)
    print (l.elem, l.next.elem, l.next.next.elem, l.next.next.next.elem)

"""
def reverse1(head):
    if head is None or head.next is None:
        return head
    current = head
    pre = None
    pnext = None
    while current is not None:
        pnext = current.next
        current.next = pre
        pre = current
        current = pnext

    return pre
"""

相关文章

  • 4.链表反转

    python实现单链表的反转 递归实现 迭代方法,通过声明一个头指针进行节点与节点之间的链接

  • Algorithm小白入门 -- 单链表

    单链表递归反转链表k个一组反转链表回文链表 1. 递归反转链表 单链表节点的结构如下: 1.1 递归反转整个单链表...

  • 链表反转

    循环反转链表 递归反转链表

  • 5个链表的常见操作

    链表 链表反转 LeetCode206:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 环路检...

  • JZ-015-反转链表

    反转链表 题目描述 输入一个链表,反转链表后,输出新链表的表头。题目链接: 反转链表[https://www.no...

  • 算法学习(链表相关问题)

    LeetCode 206 反转链表 LeetCode 92 反转链表II (练习) 完成,方法:在反转链表上改 L...

  • 实战高频leetcode题目

    1. 反转链表 : 反转链表是常见简单题目,定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点...

  • 链表算法归纳

    1.单链表反转 2.链表中环的检测 3.两个有序的链表合并 4.删除链表倒数第n个结点 5.求链表的中间结点

  • 【教3妹学算法】2道链表类题目

    题目1:反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head ...

  • 剑指offer算法题解

    1. JZ3 从尾到头打印链表 2. JZ15 反转链表 3. JZ16 合并两个排序的链表 4. JZ14 链表...

网友评论

      本文标题:4.链表反转

      本文链接:https://www.haomeiwen.com/subject/nqphwhtx.html