码迷,mamicode.com
首页 > 编程语言 > 详细

2020年面试算法题合集(北京中小公司版)持续更新

时间:2020-01-11 18:43:54      阅读:57      评论:0      收藏:0      [点我收藏+]

标签:www   https   元素   pre   剑指offer   leetcode   关键点   lin   next   

数组

链表

1. 剑指offer24:反转链表 (leetcode206. Reverse Linked List)

方法1: iterative

记忆点: 采用pre,cur,next3个指针进行迭代

关键点:

  1. 分析出有3个指针: pre,cur,next。
  2. for的终止条件cur != nil表示每个链表节点都需要翻转一次. 以链表[1,2,3]为例,cur != nil可以使得1,2,3都分别作为cur执行一次循环。
  3. 返回的指针是pre。因为退出循环的条件是cur==nil,退出循环后的指针的值为pre=xxx,cur=nil,next=nil,很明显需要返回pre。
//      1->2->3->null
//null<-1<-2<-3
// cur:当前处理的节点,cur.Next需要指向其前一个元素
// next:保存子链
// pre:保存前一个元素
// Test Cases: 1. NULL 2.One Node 3. Two Nodes
func reverseList(head *ListNode) *ListNode {
    var pre *ListNode 
    cur := head
    for cur != nil{
        next := cur.Next // save next
        cur.Next = pre // recerse cur
        // update pointers
        pre = cur
        cur = next
    }
    return pre
}

方法2: recursive

如何递归反转链表
How To Reverse A Singly Linked List | The Ultimate Explanation (Iteratively & Recursively)

递归

2020年面试算法题合集(北京中小公司版)持续更新

标签:www   https   元素   pre   剑指offer   leetcode   关键点   lin   next   

原文地址:https://www.cnblogs.com/yudidi/p/12180596.html

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