zoukankan      html  css  js  c++  java
  • go 刷算法第一题——反转链表

    一步一个脚印,弄懂吸收了,才是自己的知识

    题目

    输入:{1,2,3}
    返回值:{3,2,1}

    package main
    
    type ListNode struct {
        Val  int
        Next *ListNode
    }
    
    func ReverseList(pHead *ListNode) *ListNode {
        // write code here
    }
    
    

    写法一:简单反转

    func ReverseList(pHead *ListNode) *ListNode {
        // write code here
        if pHead == nil || pHead.Next == nil {
            return pHead
        }
        var newHead *ListNode
        for pHead != nil {
            // 保存下一节点值
            pNext := pHead.Next
    
            // 反转节点赋值
            // 当前元节点下一节点设值为反转节点
            pHead.Next = newHead
            // 反转节点等于当前元节点
            newHead = pHead
    
            // 下一节点作为下一次判断元节点
            pHead = pNext
        }
        return newHead
    }
    

    写法二:反转+Go平行赋值

    func ReverseList( pHead *ListNode ) *ListNode {
        if pHead == nil || pHead.Next == nil{
            return pHead
        }
        var newHead *ListNode
        for pHead != nil {
            pHead, pHead.Next, newHead = pHead.Next, newHead, pHead
        }
        return newHead
    }
    

    写法三:递归

    func ReverseList(head *ListNode) *ListNode {
        // write code here
        if head == nil || head.Next == nil {
            return head
        }
    
        res := ReverseList(head.Next)
    
        head.Next.Next = head
        head.Next = nil
    
        return res
    }
    
  • 相关阅读:
    First duplicate value
    SQL学习笔记day1
    Find closest value in BST
    BST construction
    Closest sum_pair
    滑动窗口 sliding window
    设计模式(3)观察者模式
    设计模式(1)装饰模式总结
    深刻探讨public class=new class();
    与时间赛跑,我的2012
  • 原文地址:https://www.cnblogs.com/jiangdewen/p/15386510.html
Copyright © 2011-2022 走看看