单链表反转 | 不合法的路径地址转变为合法路径

单链表反转 | 不合法的路径地址转变为合法路径

今天参加一个云服务企业的视频面试的时候,面试官一上来就要考验基本功。然后就出了两个算法题:一个链表反转;一个求合法路径地址。面试的时候答的不够好,所以现在总结一下这两个笔试题。

1. python单链表反转

单链表结构

在这里插入图片描述
单链表反转问题就不细说,网上能找到很多。使用三个变量L、M、R互相赋值迭代,并建立指向关系,从而实现单链表的反转。直接上代码

class Node(object):
    def __init__(self, data, next=None):
        self.val = data
        self.next = next

def reversef(head):
    if head == None:
        return None
    L, M, R = Node, Node, head
    while R.next != None:
        L = M
        M = R
        R = R.next
        M.next = L
    R.next = M
    return R

if __name__ == '__main__':
    l1 = Node(3)
    l1.next = Node(2)
    l1.next.next = Node(1)
    l1.next.next.next = Node(9)
    l = reversef(l1)
    print (l.val, l.next.val, l.next.next.val, l.next.next.next.val)

输出:

(9, 1, 2, 3)

Process finished with exit code 0

2. 合法路径问题

问题:一个合法的路径中最后一个字符不能是’/’,且子文件与父文件之间只能有一个’/’,例如:/home/user/my/ae。
设计一个算法,将输入的路径字符串转变为合法路径并输出。

例子:

  1. 输入: /home//user/myae
    输出: /home/user/my/ae
  2. 输入: /home///opt//sdfe/
    输出: /home/opt/sdfe

代码如下:

def lujing(s):
    strs = s.split('/')
    strt = list(filter(None,strs))
    print('/'+'/'.join(strt))

if __name__ == '__main__':
    s='ad/asdf//asdf///asdf//safd/ae///ead/'
    lujing(s)
/ad/asdf/asdf/asdf/safd/ae/ead

Process finished with exit code 0

思路:

  1. 通过split()方法将字符串用 '/ ’ 进行分割
  2. 删除分割后得到的list表中的空元素 ’ ’
    [‘ad’, ‘asdf’, ‘’, ‘asdf’, ‘’, ‘’, ‘asdf’, ‘’, ‘safd’, ‘ae’, ‘’, ‘’, ‘ead’, ‘’]
  3. 通过join()方法将list表中的元素通过 '/ ’ 进行合并

注:filter() 函数是python的内置函数,用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值