美文网首页
链表:203.移除链表元素

链表:203.移除链表元素

作者: zmfflying | 来源:发表于2020-12-02 14:43 被阅读0次

    /**

    题目

    删除链表中等于给定值 val 的所有节点。

    示例:

    输入: 1->2->6->3->4->5->6, val = 6
    输出: 1->2->3->4->5

    测试代码

    let l1 = ListNode(1)
    let l2 = ListNode(2)
    let l3 = ListNode(6)
    let l4 = ListNode(3)
    let l5 = ListNode(4)
    let l6 = ListNode(5)
    let l7 = ListNode(6)
    l1.next = l2
    l2.next = l3
    l3.next = l4
    l4.next = l5
    l5.next = l6
    l6.next = l7
    print("(description1(l1: removeElements(l1, 6)!))")

    笔记

    核心是要找到新的头节点和替换后的.next可能也是重复的
    循环中只要当前节点的值不等于指定值,那么当前节点就是头节点,不能重复赋值

    代码地址

    https://github.com/zmfflying/ZMathCode
    */

    解题代码

    /**
     public class ListNode {
         public var val: Int
         public var next: ListNode?
         public init(_ val: Int) {
             self.val = val
             self.next = nil
         }
         
     }
    
     func description1(l1: ListNode) -> String {
         var tem1 = l1
         var text = String()
         while tem1.next != nil {
             text.append("\(tem1.val) ->")
             tem1 = tem1.next!
         }
         text.append("\(tem1.val)")
         return text
     }
     */
    
    func removeElements(_ head: ListNode?, _ val: Int) -> ListNode? {
        var res: ListNode?
        var temp = head
        while temp != nil {
            if temp?.val != val && res == nil {
                //这一步是找出新的头结点
                res = temp
            }
            
            if temp?.next?.val == val {
                //这里是把next的节点替换掉
                //替换后不能改变temp的头结点
                //因为新的next节点可能也是重复的
                temp?.next = temp?.next?.next
            } else {
                temp = temp?.next
            }
        }
        return res
    }
    
    

    相关文章

      网友评论

          本文标题:链表:203.移除链表元素

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