LeetCode—链表反转
题目来源于 LeetCode 的第 206 题,难度为:easy。目前的通过率是71.7%。
题目描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
题目解析
设置三个节点pre、cur、next
(1)每次查看cur节点是否为NULL,如果是,则结束循环,获得结果
(2)如果cur节点不是为NULL,则先设置临时变量next为cur的下一个节点
(3)让cur的下一个节点变成指向pre,而后pre移动cur,cur移动到next
(4)重复(1)(2)(3)
动画演示
为了让动画看的简单易懂,next 指针就没有画, next = cur?.next
代码实现
/** * Definition for singly-linked list. * public class ListNode { * public var val: Int * public var next: ListNode? * public init() { self.val = 0; self.next = nil; } * public init(_ val: Int) { self.val = val; self.next = nil; } * public init(_ val: Int, _ next: ListNode?) { self.val = val; self.next = next; } * } */ class Solution { func reverseList(_ head: ListNode?) -> ListNode? { var cur = head var next = cur?.next var pre : ListNode? while (cur != nil) { next = cur?.next cur?.next = pre pre = cur cur = next } return pre } }
进阶解法:递归实现
可以查看前期分享的文章 leetcode 递归编程技巧-链表算法题 来获得答案。
欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!