每日一题 【每日一题】实现单链表翻转 -Python-20210906

Jack · 2021年09月06日 · 最后由 lework 回复于 2021年12月24日 · 67 次阅读
本帖已被设为精华帖!

实现单链表翻转

Jack 将本帖设为了精华贴 09月06日 19:46

参考代码:

class Node(object):
    def __init__(self, data=None, next=None):
        self.data = data
        self.next = next
link = Node(1, Node(2, Node(3, Node(4, Node(5, Node(6, Node(7, Node(8, Node(9)))))))))
def rev(link):
    pre = link
    cur = link.next
    pre.next = None
    while cur:
        tmp = cur.next
        cur.next = pre
        pre = cur
        cur = tmp
    return pre
root = rev(link)
while root:
    print root.data
    root = root.next
package main

import "fmt"

// 链表节点
type ListNode struct {
    Val int
    Next *ListNode
}

func reverserList(head *ListNode) *ListNode {
    var (
        cur = head
        pre *ListNode = nil
    )
    for cur != nil {
        pre,cur,cur.Next = cur,cur.Next, pre  // 链表翻转
    }
    return pre
}


func main() {
    /*
    问题:反转一个单链表。
    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL
    */

    head := new(ListNode)
    head.Val = 5
    for i := 4; i > 0; i-- {
        tmp := &ListNode{
            Val:  i,
            Next: nil,
        }
        tmp.Next = head //头插
        head = tmp
    }

    pre := reverserList(head)
    for pre != nil {
        fmt.Println(pre.Val)
        pre = pre.Next
    }
}
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册