情诗网 >表白情话 > 正文

白话文之反转链表

来源:情诗网    2021-04-03    分类:表白情话

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

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

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
}

热门文章