码迷,mamicode.com
首页 > 其他好文 > 详细

剑指 Offer 24. 反转链表

时间:2021-04-24 13:41:51      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:var   定义   head   ble   code   lock   block   构建   最新   

剑指 Offer 24. 反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

限制:

0 <= 节点个数 <= 5000

思路

golang

笨方法:遍历链表,新建一个栈保存遍历的值,最后再新建一个链表,将栈中的值存进链表
时间复杂度:O(n)
空间复杂度:O(n)

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverseList(head *ListNode) *ListNode {
    var stack []int //新建一个栈保存原链表遍历的值
    var newHead *ListNode = head  //新的链表的头节点
    var tmp *ListNode //临时节点
    cur := newHead

    //保存原链表的值
    for head!=nil{
        stack = append(stack,head.Val)
        head = head.Next
    }

    //构建新的链表
    for len(stack) != 0{
        tmp = cur.Next
        cur.Val = stack[len(stack)-1]
        stack = stack[:len(stack)-1]
        cur = tmp
    }

    return newHead
}
//现在想想  为什么不直接将栈的类型设置位*ListNode类型呢 省的赋值了
func reverseList(head *ListNode) *ListNode {
    var stack []*ListNode //新建一个栈保存原链表遍历的节点
    if head == nil{ //需要增加一个判断为空的条件
        return nil
    }

    //保存原链表的节点
    for head.Next!=nil{
        stack = append(stack,head)
        head = head.Next
    }

    //构建新的链表
    var newHead *ListNode = head  //新的链表头节点此时指向原链表最后一个节点
    for len(stack) != 0{
        head.Next = stack[len(stack)-1]
        head = head.Next
        stack = stack[:len(stack)-1]
    }
    head.Next = nil
    return newHead
}

双指针法:原地调转链表指针的方向,需要cur指针初始为head,指向遍历的当前节点,pre指针初始位nil表示最新得头节点。还需要一个临时指针tmp作为保留cur的下一位
时间复杂度:O(1)
空间复杂度:O(1)

func reverseList(head *ListNode) *ListNode {
    var pre *ListNode = nil
    var tmp *ListNode
    cur := head
    for cur!=nil{
        tmp = cur.Next
        cur.Next = pre
        pre = cur
        cur = tmp
    }
    return pre
}

剑指 Offer 24. 反转链表

标签:var   定义   head   ble   code   lock   block   构建   最新   

原文地址:https://www.cnblogs.com/zmk-c/p/14695835.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!