美文网首页R7的算法
单向链表反转

单向链表反转

作者: R7_Perfect | 来源:发表于2020-01-02 17:46 被阅读0次

    先定义单向链表结构

    class ListNode (val id : Int) {
            var next: ListNode? = null
        }
    

    假如有一个单向链表:
    1->2->3->4->null
    反转步骤如下

    1->null
    2->3->4->null
    
    2->1->null
    3->4->null
    
    3->2->1->null
    4->null
    
    4->3->2->1->null
    

    实现代码:

    fun reverseList(_head: ListNode?): ListNode? {
            var head = _head
            var next: ListNode? = null
            var pre: ListNode? = null
    
            while (head != null) {
                next = head.next
                head.next = pre
                pre = head
                head = next
            }
            return pre
        }
    

    先将下一个节点保存起来。
    next = head.next

    处理当前节点的next指针,指向之前保存的pre
    head.next = pre

    保存当前节点为pre,给下一个使用
    pre = head

    准备处理当前节点的下一个节点
    head = next

    完整测试代码:

    object Solution {
        fun reverseList(_head: ListNode?): ListNode? {
            var head = _head
            var next: ListNode? = null
            var pre: ListNode? = null
    
            while (head != null) {
                next = head.next
                head.next = pre
                pre = head
                head = next
            }
            return pre
        }
    
        @JvmStatic
        fun main(args: Array<String>) {
            val n1 = ListNode(1)
            val n2 = ListNode(2)
            val n3 = ListNode(3)
            val n4 = ListNode(4)
            n1.next = n2
            n2.next = n3
            n3.next = n4
            reverseList(n1)
        }
    }
    
    data class ListNode (var `val`: Int) {
        var next: ListNode? = null
    }
    

    相关文章

      网友评论

        本文标题:单向链表反转

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