Merge pull request #2044 from jianghongcheng/master

Update 0707.设计链表.md
This commit is contained in:
程序员Carl
2023-05-01 09:43:40 +08:00
committed by GitHub

View File

@ -486,15 +486,10 @@ class MyLinkedList {
Python Python
```python ```python
# 单链表 # 单链表
class Node(object): class MyLinkedList1:
def __init__(self, x=0):
self.val = x
self.next = None
class MyLinkedList(object):
def __init__(self): def __init__(self):
self.head = Node() self.dummy_head = Node()# 添加虚拟头指针,便于操作
self.size = 0 # 设置一个链表长度的属性,便于后续操作,注意每次增和删的时候都要更新 self.size = 0 # 设置一个链表长度的属性,便于后续操作,注意每次增和删的时候都要更新
def get(self, index): def get(self, index):
@ -504,7 +499,7 @@ class MyLinkedList(object):
""" """
if index < 0 or index >= self.size: if index < 0 or index >= self.size:
return -1 return -1
cur = self.head.next cur = self.dummy_head.next
while(index): while(index):
cur = cur.next cur = cur.next
index -= 1 index -= 1
@ -516,8 +511,8 @@ class MyLinkedList(object):
:rtype: None :rtype: None
""" """
new_node = Node(val) new_node = Node(val)
new_node.next = self.head.next new_node.next = self.dummy_head.next
self.head.next = new_node self.dummy_head.next = new_node
self.size += 1 self.size += 1
def addAtTail(self, val): def addAtTail(self, val):
@ -526,7 +521,7 @@ class MyLinkedList(object):
:rtype: None :rtype: None
""" """
new_node = Node(val) new_node = Node(val)
cur = self.head cur = self.dummy_head
while(cur.next): while(cur.next):
cur = cur.next cur = cur.next
cur.next = new_node cur.next = new_node
@ -548,12 +543,12 @@ class MyLinkedList(object):
return return
node = Node(val) node = Node(val)
pre = self.head cur = self.dummy_head
while(index): while(index):
pre = pre.next cur = cur.next
index -= 1 index -= 1
node.next = pre.next node.next = cur.next
pre.next = node cur.next = node
self.size += 1 self.size += 1
def deleteAtIndex(self, index): def deleteAtIndex(self, index):
@ -563,7 +558,7 @@ class MyLinkedList(object):
""" """
if index < 0 or index >= self.size: if index < 0 or index >= self.size:
return return
pre = self.head pre = self.dummy_head
while(index): while(index):
pre = pre.next pre = pre.next
index -= 1 index -= 1
@ -574,11 +569,10 @@ class MyLinkedList(object):
# 相对于单链表, Node新增了prev属性 # 相对于单链表, Node新增了prev属性
class Node: class Node:
def __init__(self, val): def __init__(self, val=0, next = None, prev = None):
self.val = val self.val = val
self.prev = None self.next = next
self.next = None self.prev = prev
class MyLinkedList: class MyLinkedList:
@ -601,6 +595,20 @@ class MyLinkedList:
node = node.next node = node.next
return node return node
def _update(self, prev: Node, next: Node, val: int) -> None:
"""
更新节点
:param prev: 相对于更新的前一个节点
:param next: 相对于更新的后一个节点
:param val: 要添加的节点值
"""
# 计数累加
self._count += 1
node = Node(val)
prev.next, next.prev = node, node
node.prev, node.next = prev, next
def get(self, index: int) -> int: def get(self, index: int) -> int:
""" """
Get the value of the index-th node in the linked list. If the index is invalid, return -1. Get the value of the index-th node in the linked list. If the index is invalid, return -1.
@ -634,19 +642,6 @@ class MyLinkedList:
node = self._get_node(index) node = self._get_node(index)
self._update(node.prev, node, val) self._update(node.prev, node, val)
def _update(self, prev: Node, next: Node, val: int) -> None:
"""
更新节点
:param prev: 相对于更新的前一个节点
:param next: 相对于更新的后一个节点
:param val: 要添加的节点值
"""
# 计数累加
self._count += 1
node = Node(val)
prev.next, next.prev = node, node
node.prev, node.next = prev, next
def deleteAtIndex(self, index: int) -> None: def deleteAtIndex(self, index: int) -> None:
""" """
Delete the index-th node in the linked list, if the index is valid. Delete the index-th node in the linked list, if the index is valid.
@ -656,6 +651,16 @@ class MyLinkedList:
# 计数-1 # 计数-1
self._count -= 1 self._count -= 1
node.prev.next, node.next.prev = node.next, node.prev node.prev.next, node.next.prev = node.next, node.prev
# 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)
``` ```
Go Go