美文网首页《iOS白话文》
白话文之反转链表

白话文之反转链表

作者: 旺仔Milk | 来源:发表于2019-03-21 11:51 被阅读5次

啥东西都应该有套路,玩游戏有玩游戏的套路, 升级,下副本,拿装备,下更高级副本,拿更高级装备,如此循环
编程也有编程的套路, 如果你还感觉迷茫或者还在考虑学前端还是后端或者 选什么语言?
一句话 前端&后端&任何语言 这都叫编程 都叫程序员, 直接 升级下副本吧,至少先玩上一个 你才能知道 这游戏怎么样,然后在决定要在这个游戏中 怎么玩~

链表是啥自行百度吧
大致结构 就是

Node{
//有一个数据字段  
data;
//还有一个 指向下一节点的 指针
Node *next ;
}

创建链表就不说了吧.... 循环就好了

那么反转链表是啥?
当然就是将链表反过来咯

1->2->3->4->5
反转:
5->4->3->2->1

怎么操作呢?
说套路之前先说一条定理:

看书记不住的原因 只有一点! 那是因为你没有理解其意义
有的人看两遍就能理解, 有的人 套用一下就能理解, 而有的人 需要大量的重复的写的过程中突然bing!的一下就理解了

反转单项链表

那反转单项链表有啥套路呢?

  1. 新建一个链表 = 原链表
  2. 用一个变量保存链表的next 节点(保留 原链表的后续节点 理解为count - 当前)
  3. 对新链表的next节点进行重新赋值
  4. 用另一个变量保存当前节点
  5. 移动当前链表位置 重复 1 2 3 4 操作
class Node {
AnyObject *data;
Node *next ;
}

// 不要在意用什么语言 大意能看懂就好
func reverseLink(link:Node) -> Node {
  // 1.
  var tempHead = link
  var next:Node = nil
  var pre:Node = nil
  while (tempHead) {
    // 2.
    next = tempHead.next
    // 3.  这里需要区分 原链表的第一个元素反转后  next 节点应该为 null
   tempHead.next = pre
    // 4.
    pre = tempHead
    // 5.
    tempHead = next
    // 6. 执行while循环 直到 next = nil
    }
  // 循环结束当前tempHead = nil, 所以 return的是 tempHead=nil操作之前的那一个节点, 第四步
  return pre
}

反转双向链表

链表结构中加了一个last 节点

class Node {
AnyObject *data;
Node *next;
Node *last;
}

// 不要在意用什么语言 大意能看懂就好
func reverseLink(link:Node) -> Node {
  // 1.
  var tempHead = link
  var next:Node = nil
  var pre:Node = nil
  while (tempHead) {
    // 2.
    next = tempHead.next
    // 3.  这里需要区分 原链表的第一个元素反转后  next 节点应该为 null
   tempHead.next = pre
   // 头节点的设置
   tempHead.last = next
    // 4.
    pre = tempHead
    // 5.
    tempHead = next
    // 6. 执行while循环 直到 next = nil
    }
  // 循环结束当前tempHead = nil, 所以 return的是 tempHead=nil操作之前的那一个节点, 第四步
  return pre
}

相关文章

  • 白话文之反转链表

    啥东西都应该有套路,玩游戏有玩游戏的套路, 升级,下副本,拿装备,下更高级副本,拿更高级装备,如此循环编程也有编程...

  • Algorithm小白入门 -- 单链表

    单链表递归反转链表k个一组反转链表回文链表 1. 递归反转链表 单链表节点的结构如下: 1.1 递归反转整个单链表...

  • 链表反转

    循环反转链表 递归反转链表

  • 5个链表的常见操作

    链表 链表反转 LeetCode206:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 环路检...

  • JZ-015-反转链表

    反转链表 题目描述 输入一个链表,反转链表后,输出新链表的表头。题目链接: 反转链表[https://www.no...

  • 链表 之 反转链表

    示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 方法1:三...

  • 算法学习(链表相关问题)

    LeetCode 206 反转链表 LeetCode 92 反转链表II (练习) 完成,方法:在反转链表上改 L...

  • 实战高频leetcode题目

    1. 反转链表 : 反转链表是常见简单题目,定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点...

  • 【教3妹学算法】2道链表类题目

    题目1:反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head ...

  • leecode刷题(22)-- 反转链表

    leecode刷题(22)-- 反转链表 反转数组 反转一个单链表。 示例: 进阶:你可以迭代或递归地反转链表。你...

网友评论

    本文标题:白话文之反转链表

    本文链接:https://www.haomeiwen.com/subject/gpcqvqtx.html