啥东西都应该有套路,玩游戏有玩游戏的套路, 升级,下副本,拿装备,下更高级副本,拿更高级装备,如此循环
编程也有编程的套路, 如果你还感觉迷茫或者还在考虑学前端还是后端或者 选什么语言?
一句话 前端&后端&任何语言 这都叫编程 都叫程序员, 直接 升级下副本吧,至少先玩上一个 你才能知道 这游戏怎么样,然后在决定要在这个游戏中 怎么玩~
链表是啥自行百度吧
大致结构 就是
Node{
//有一个数据字段
data;
//还有一个 指向下一节点的 指针
Node *next ;
}
创建链表就不说了吧.... 循环就好了
那么反转链表是啥?
当然就是将链表反过来咯
1->2->3->4->5
反转:
5->4->3->2->1
怎么操作呢?
说套路之前先说一条定理:
看书记不住的原因 只有一点! 那是因为你没有理解其意义
有的人看两遍就能理解, 有的人 套用一下就能理解, 而有的人 需要大量的重复的写的过程中突然bing!的一下就理解了
反转单项链表
那反转单项链表有啥套路呢?
- 新建一个链表 = 原链表
- 用一个变量保存链表的next 节点(保留 原链表的后续节点 理解为count - 当前)
- 对新链表的next节点进行重新赋值
- 用另一个变量保存当前节点
- 移动当前链表位置 重复 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
}