题解 | #输出单向链表中倒数第k个结点#

输出单向链表中倒数第k个结点

https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d

class ListNode:
    """链表节点"""

    def __init__(self, item, next=None):
        self.item = item
        self.next = next


class LinkedList:
    """链表"""

    def __init__(self):
        self.head = None


    def create(self, data):
        """以对应date建立单链表"""
        self.head = ListNode(0)
        cur = self.head
        for i in range(len(data)):
            node = ListNode(data[i])
            cur.next = node
            cur = cur.next

    def travel(self):
        """列表遍历"""
        p = self.head.next
        while p:
            print(p.item, end=" ")
            p = p.next
        print()
    def length(self):
        """求链表的长度"""
        p = self.head
        count = 0
        while p:
            count += 1
            p = p.next
        return count-1
    def get_fuitem(self, position):
        """获取逆序某位置的元素"""
        if position < 0 or position >= self.length():
            return None
        p = self.head
        count = 0
        while count != self.length()-position+1:
            p = p.next
            count += 1
        return p.item

while True:
    try:
        n = int(input())
        l = list(map(int,input().split(" ")))
        k = int(input())

        a = LinkedList()
        a.create(l)
        if n==k==1:
            print(a.head.next.item)
        else:
            print(a.get_fuitem(k))
    except:
        break

本题使用的是最常规的,正序遍历链表,然后输出n-k+1的元素,另一种算法是快慢索引,有机会在用

使用class 建立单链表,在其中的定义creat()来输入一个单列表,使用length求长度,travel是不需要的顺手写的,使用

get_fuitem方法得到倒叙的第k个元素。

注意:这个单链表创造时,其实head是固定的 0 ,但是我在计算length时将0抹去了,就是减了1.

在遍历单链表时,我实际上是从head的next开始遍历的。实际效果使用是正常的,就是注明一下。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务