周报1.2

题目:

第一天:707. 设计链表

第二天:206. 反转链表

收获,在使用head时,要先将self.head赋值给head,才能对head进行操作,在add和delete之后要改变链表的长度,range()函数是从0开始的

class Node:

    def __init__(self, val):

        self.val = val

        self.next = None

class MyLinkedList:

    def __init__(self):

        self.head = Node(0)

        self.size = 0 

    def get(self, index: int) -> int:

        if index < 0 or index >= self.size:

            return -1

        head = self.head

        #返回的是第i个,range()是从0开始算的

        for i in range(index + 1):

            head = head.next

        return head.val

    def addAtHead(self, val: int) -> None:

        new = Node(val)

        temp = self.head.next

        self.head.next = new

        new.next = temp

        self.size += 1

    def addAtTail(self, val: int) -> None:

        new = Node(val)

        head = self.head

        while head.next != None:

            head = head.next

        head.next = new

        self.size += 1


 

    def addAtIndex(self, index: int, val: int) -> None:

        '''

        if index > self.number: return

        elif index = n: 

            self.number.next = val 

        else:

            self.

        '''

        new = Node(val)

        head = self.head

        if index == 0:

            self.addAtHead(val)

            return

        elif index == self.size:

            self.addAtTail(val)

            return

        elif index < 0 or index > self.size:

            return

        for i in range(index):

            head = head.next

        temp = head.next

        head.next = new

        new.next = temp

        self.size += 1


 

    def deleteAtIndex(self, index: int) -> None:

        '''

        if i == index - 1 and 0 < index < len(self):

            self.next = self.next.next

        elif index < 0:

            self.

        '''

        if index >= self.size:

            return

        elif index < 0:

            index = 0

        head = self.head

        for i in range(index):

            head = head.next

        head.next = head.next.next

        self.size -= 1



 

# 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)

2.在反转的过程中,首先要用tmp保留整个链表的结构,以便遍历。在循环中让cur.next指向pre,使得cur永远是新添加的结点

class Solution:

    def reverseList(self, head: ListNode) -> ListNode:

        cur = head

        pre = None

        while (cur != None):

            temp = cur.next     #将原本的cur.next先存起来

            cur.next = pre      #反转

            pre = cur           #让把遍历到的cur链表赋给pre,

            cur = temp          #遍历下一个结点

        return pre  

上一篇:css变量


下一篇:网安(1)——了解你的系统