编程算法面试常考题答案汇总
Design Linked List
Leetcode707 - Design Linked List
Design your implementation of the linked list. You can choose to use a singly or doubly linked list.
A node in a singly linked list should have two attributes: val and next. val is the value of the current node, and next is a pointer/reference to the next node.
If you want to use the doubly linked list, you will need one more attribute prev to indicate the previous node in the linked list. Assume all nodes in the linked list are 0-indexed.
Solution
# 本代码来自 Techie科技求职,由 Techie Learning,Inc 原创
# - Techielearning.com 是来自硅谷的科技职业发展平台。
# - 本代码所属课程:<< Techie编程算法集训营 >>
# - 12周56+课时精品内容,精讲软件工程师编程算法面试核心知识体系。
# - 120道面试真题详解,27类常考题型剖析,1对1面试辅导与专业答疑。
# - 官方网站:https://www.techielearning.com/
# - 版权所有,禁止转发和分享
class ListNode(object):
def __init__(self, data, next = None):
self.data = data
self.next = next
class MyLinkedList:
def __init__(self):
self._head = None
self._tail = None
self._size = 0
def _get(self, head, index):
for _ in range(index):
head = head.next
return head
def _create_with_one_node(self, val):
self._head = self._tail = ListNode(val)
self._size = 1
def get(self, index: int) -> int:
if 0 <= index < self._size:
return self._get(self._head, index).data
else:
return -1
def addAtHead(self, val: int) -> None:
if self._size == 0:
self._create_with_one_node(val)
else:
self._head = ListNode(val, self._head)
self._size += 1
def addAtTail(self, val: int) -> None:
if self._size == 0:
self._create_with_one_node(val)
else:
self._tail.next = ListNode(val)
self._tail = self._tail.next
self._size += 1
def addAtIndex(self, index: int, val: int) -> None:
if index < 0 or index > self._size:
return
if index == self._size:
self.addAtTail(val)
elif index == 0:
self.addAtHead(val)
else:
pred = self._get(self._head, index - 1)
pred.next = ListNode(val, pred.next)
self._size += 1
def deleteAtIndex(self, index: int) -> None:
if index < 0 or index >= self._size:
return
if index == 0:
self._head = self._head.next
self._size -= 1
if self._size == 0:
self._tail = None
else:
pred = self._get(self._head, index - 1)
pred.next = pred.next.next
if index == self._size - 1:
self._tail = pred
self._size -= 1
def __str__(self):
strs = []
node = self._head
while node is not None:
strs.append(str(node.data))
node = node.next
return ' -> '.join(strs)
def __len__(self):
return self._size
如果大家对题目代码有任何问题,欢迎扫描下方的二维码或者搜索 TonyCoding20 添加Techie教师团队微信。期待与同学们继续交流!