leetcode链表

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val #val表示值
        self.next = next #指针next表示后继指针

class MyLinkedList:

    def __init__(self):#初始化
        self.next = None


    def get(self, index: int) -> int:
#获取链表中下标为 index 的节点的值。如果下标无效,则返回 -1
        cur = self.head
        count = 0
        while cur:
            count += 1
            if count == index:
                return cur.val
            cur = cur.next #cur会停止在下表为i的那一项
        return -1
#如何判断下标无效?


    def addAtHead(self, val: int) -> None:
#将一个值为 val 的节点插入到链表中第一个元素之前
        node = ListNode(val)
        node.next = self.head
        self.head = node


    def addAtTail(self, val: int) -> None:
#将一个值为 val 的节点追加到链表中作为链表的最后一个元素
        node = ListNode(val)
        cur = self.head
        while cur.next:
            cur = cur.next
        cur.next = node


    def addAtIndex(self, index: int, val: int) -> None:
#将一个值为 val 的节点插入到链表中下标为 index 的节点之前。
#如果 index 等于链表的长度,那么该节点会被追加到链表的末尾。
#如果 index 比长度更大,该节点将 不会插入 到链表中。
        count = 0
        node = ListNode(val)
        cur = self.head
        while cur:
            if count == index-1:
                tmp = cur
            count += 1
            cur = cur.next
        if count >= index:
            node.next = cur.next
            cur.next = node


    def deleteAtIndex(self, index: int) -> None:
#如果下标有效,则删除链表中下标为 index 的节点。
#i-1的next,连到i的next
        count = 0
        cur = self.head
        while cur and count<index-1:
            count += 1
            cur = cur.next
        #此时的cur是i-1
        cur.next = cur.next.next

# Your MyLinkedList object will be instantiated and called as such:
# obj = MyLinkedList()
# param_1 = obj.get(index)
# obj.addAtHead(val)
# obj.addAtTail(val)
# obj.addAtIndex(index,val)
# obj.deleteAtIndex(index)

  

posted @ 2023-10-20 01:49  ve-2021  阅读(26)  评论(0编辑  收藏  举报