0
点赞
收藏
分享

微信扫一扫

Leetcode 算法面试冲刺 链表 理论 上(六)

老罗话编程 2022-01-20 阅读 47

文章目录

链表定义

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

链表的操作

遍历

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当node1指向node2时候,因为数值1没有变量指向它,它就变成了垃圾。python有一个进程专门处理垃圾,垃圾回收。定期启动这个进程去清除。

在这里插入图片描述

插入

在这里插入图片描述
在这里插入图片描述

查找

在这里插入图片描述
174 · 删除链表中倒数第n个节点
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。

在这里插入图片描述

def removeNthFromEnd(self, head, n):
        # write your code here
        count = 0
        cur, pre = head, head
        while cur:
            count += 1
            cur = cur.next

        if count == n: 
            head = head.next
            return head

        for _ in range(count - n - 1):
            pre = pre.next
        pre.next = pre.next.next
        return head

在这里插入图片描述
下面是官方答案,用了2个指针,很巧妙。

class Solution(object):
    '''
    题意:删除链表中倒数第n个结点,尽量只扫描一遍。
    使用两个指针扫描,当第一个指针扫描到第N个结点后,
    第二个指针从表头与第一个指针同时向后移动,
    当第一个指针指向空节点时,另一个指针就指向倒数第n个结点了       
    '''
    def removeNthFromEnd(self, head, n):
        res = ListNode(0)
        res.next = head
        tmp = res
        for i in range(0, n):
            head = head.next
        while head != None:
            head = head.next
            tmp = tmp.next
        tmp.next = tmp.next.next
        return res.next

举报

相关推荐

0 条评论