【每日一题】206. 反转链表 迭代算法

118 阅读2分钟

算法

这是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篇文章。