三行代码解反转链表

Posted 魏小言

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三行代码解反转链表相关的知识,希望对你有一定的参考价值。

文章目录


最强解析面试题:链表反转[go版]

文章讲解 “ 链表反转[go版] ” 经典面试题,包含思路及源码,及解惑!

题目

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

思路

  • 递归/迭代思路
    1->2->3
    • 目标分三步
      • 第一步是 1->nil;第二步是 2->1->nil;第三步是 3->2->1->nil
    • 准备
      • 预备首节点 pre
    • 迭代 or 递归
      • 1 单拎出来 tmp
      • 1 -> 1.next [ 2 单拎出来 tmp]
      • tmp -> pre
      • pre = tmp
    • 退出条件
      • 1 == nil

代码

三行一解

这里给出三行代码,足以完成题目,了解更多,请关注 公众号 “ code 杂坛 “!

package main
import . "nc_tools"
/*
 * type ListNode struct
 *   Val int
 *   Next *ListNode
 * 
 */


/**
 *
 * @param pHead ListNode类
 * @return ListNode类
 */
func ReverseList(pHead *ListNode) *ListNode 
   // write code here
   if pHead == nil || pHead.Next == nil 
      return pHead
   
   var pre *ListNode
   for pHead != nil 
      pre, pHead, pHead.Next = pHead, pHead.Next, pre
   
   return pre

常规代码

package main
import."nc_tools"
/*
 * type ListNode struct
 *   Val int
 *   Next *ListNode
 * 
 */



/**
 *
 * @param pHead ListNode类
 * @return ListNode类
 */
func ReverseList(pHead *ListNode) *ListNode 
   // write code here
   if pHead == nil || pHead.Next == nil 
      return pHead
   
   var prev *ListNode
   cur := pHead
   for 
      if cur == nil 
         break
      
      tmp := cur
      cur = cur.Next
      tmp.Next = prev
      prev = tmp
   
   return prev

以上是关于三行代码解反转链表的主要内容,如果未能解决你的问题,请参考以下文章

翻转链表 (无傀儡节点,递归+迭代)

翻转链表 (无傀儡节点,递归+迭代)

理解单链表的反转(java实现)

Python|反转链表问题解决方法

如何链表反转

反转链表