算法
这是leetcode中 #### 206. 反转链表,难度为简单
一开始理解错了,我以为是很复杂的是,结果是简答的迭代,就是说把链表划分称 pre 和 cur,也就是说存在一个切断前面和后面的联系。
比如 一开始的话 cur = 1>2>3>4>5 pre = null
接着的话 切断cur与后面的联系,然后将cur的下一个变为pre,cur.next = pre
题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/re…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
算法实现
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
//找到最后的节点,然后从后往前进行遍历 21点05分
// var Node = new ListNode()
// // 把每一个链表的放入到栈中,然后把栈进行pop,接入到新的node中
// var cur = head
// var tem = []
// while(cur){
// tem_ = cur.next
// cur.next = null
// tem.push(cur)
// cur = tem_
// }
// //对每一个栈进行pop
// var node_cur = Node
// while(tem){
// node_cur.next = tem.pop()
// node_cur = node_cur.next
// }
// return Node.next //21点11分
//21点17分
//两个进行交换 就是 1->2 编程 2->1->3 然后2和三再进行交换
//让当前的头部的尾部互换‘
//或者说是链表的冒泡排序
// if(!head || !head.next) return head
// var tail_bef = head //尾部的上一个
// var tail = tail_bef.next
// //当尾部为空时结束
// while(tail){
// var head_aft = head.next
// tail = tail_bef.next
// //头部和尾部进行交换
// //第一步,让头部指向尾部
// head.next = tail_bef.next
// //第二部,让尾部的上一个数指向头部
// tail_bef.next = head
// //第三步,让尾部指向头部的后一个数
// tail.next = head_aft
// tem = head
// head = tail
// tail = head
// }
// return head
//22点06分 ,简单的进行颠倒就可以了
var cur = head
var pre = null
while(cur){
//保存下一个
//刚才一直想不出来的原因是因为理解错了,这道题目用
const next = cur.next
cur.next = pre
pre = cur
cur = next
}
return pre
//22点08分
}
最后
这是我2022年分享的「leetcode」第NO.12篇文章。