移除链表元素--链表

题目

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

示例:

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

思路

1.  首先判断链表是否为空以及链表的第一个节点是不是等于val(该删除的节点),循环遍历到第一个不等于val的节点

2.  以p.next判断节点是否为空,然后判断p.next.val == val 

    如果相等,则指向p.next 的下一个节点 p.next = p.next?.next

    如果不相等,则将元素后移,继续判断 p = p.next!

3.  返回head,完成操作

代码

public class ListNode {
    public var val: Int
    public var next: ListNode?
    public init (_ val: Int) {
        self.val = val
        self.next = nil
    }
}

func removeElements(_ head: ListNode?, _ val: Int) -> ListNode? {
    var head = head //swift中传值为let不可变,所以转为var可变
    while head != nil && head?.val == val {
        head = head?.next
    }
    if head == nil {
        return head
    }
    var p: ListNode = head!
    while p.next != nil {
        if p.next?.val == val {
            p.next = p.next?.next
        } else {
            p = p.next!
        }
    }
    return head
}

结果

猜你喜欢

转载自www.cnblogs.com/guohai-stronger/p/11959337.html