如果帮助到您,还请点个关注吧,hahaha
这道题目可以让大家很好的熟悉链表的各种操作,下面的代码为单链表的设计模式(注意该题的链表的第一个节点的index为0)。
链表的主要操作有:
获取链表第index个节点的数值
在链表的最前面插入一个节点
在链表的最后面插入一个节点
在链表第index个节点前面插入一个节点
删除链表的第index个节点
#最直观的思路
class Node:
def __init__(self, x):
self.val = x
self.next = None
class MyLinkedList:
def __init__(self):
self.head = Node(0)#建立虚拟节点
"""
Initialize your data structure here.
"""
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.
"""
if index < 0:
return -1
node = self.head
for _ in range(index + 1):
if node.next != None:
node = node.next
else:
return -1
return node.val
def addAtHead(self, val: int) -> None:
"""
Add a node of value val before the first element of the linked list. After the insertion, the new node will be the first node of the linked list.
"""
new = Node(val)
new.next = self.head.next
self.head.next = new
def addAtTail(self, val: int) -> None:
"""
Append a node of value val to the last element of the linked list.
"""
node = self.head
while node.next != None:
node = node.next
node.next = Node(val)
def addAtIndex(self, index: int, val: int) -> None:
"""
Add a node of value val before the index-th node in the linked list. If index equals to the length of linked list, the node will be appended to the end of linked list. If index is greater than the length, the node will not be inserted.
"""
node = self.head
for _ in range(index):
if node == None:
return
node = node.next
if node == None:
node.next = Node(val)
else:
new = Node(val)
new.next = node.next
node.next = new
def deleteAtIndex(self, index: int) -> None:
"""
Delete the index-th node in the linked list, if the index is valid.
"""
if index < 0:
return
node = self.head
for _ in range(index):
node = node.next
if node.next != None:
node.next = node.next.next