数组与链表
一.數(shù)組
1.python實(shí)現(xiàn)數(shù)組的增刪查改
class Array:def __init__(self, data):self.__data = datadef find(self, index):"""index of data:param index::return:"""if index > len(self.__data) or index < 0:return Falseelse:return self.__data[index]def delete(self, index):"""delete function:param index::return:"""if index > len(self.__data) or index < 0:return Falseelse:self.__data.pop(index)return Truedef insert(self, index, value):"""insert function:param index::param value::return:"""if index > len(self.__data) or index < 0:return Falseelse:self.__data.insert(index, value)return Truedef insertToTail(self, value):"""insert data ,at tail:param value::return:"""self.__data.append(value)def printAll(self):print(self.__data) if __name__ == '__main__':data=[1,2,3,4]arr = Array(data)print('=======origin data============')arr.printAll()print('==========find data======================')print(arr.find(1))print("==========insert data ============")arr.insert(2,10)arr.printAll()print('========delete data==================')arr.delete(3)arr.printAll()2.合并兩個(gè)有序數(shù)組
https://leetcode-cn.com/problems/merge-sorted-array/submissions/
class Solution:def merge(self, nums1, m, nums2, n):while nums1[-1]==0:if len(nums1)==m:breaknums1.pop()if nums1==[]:breaknums1.extend(nums2)nums1.sort()return nums1if __name__ == '__main__':sol=Solution()nums1=[1,2,3,0,0,0]m=3nums2=[2,5,6]n=3res=sol.merge(nums1,m,nums2,n)print(res)二.鏈表
鏈表分為 4 種情況:單鏈表,單循環(huán)鏈表,雙鏈表,雙循環(huán)鏈表.
其中:data存儲(chǔ)當(dāng)前節(jié)點(diǎn)數(shù)值;
next存儲(chǔ)下一個(gè)節(jié)點(diǎn)的位置.
from typing import Optionalclass Node:def __init__(self, data, next_node=None):self.data = dataself._next = next_nodeclass SinglyLinkedList:def __init__(self):self._head = Nonedef find_by_value(self, value):p = self._headwhile p and p.data != value:p = p._nextreturn pdef find_by_index(self, index):p = self._headposition = 0while p and position != index:p = p._nextposition += 1return pdef insert_value_to_head(self, value):new_node = Node(value)self.insert_node_to_head(new_node)def insert_node_to_head(self, new_node):if new_node:new_node._next = self._headself._head = new_nodedef insert_value_after(self, node, value):new_node = Node(value)self.insert_node_after(node, new_node)def insert_node_after(self, node, new_node):if not node or not new_node:returnnew_node._next = node._nextnode._next = new_nodedef insert_value_before(self, node, value):new_node = Node(value)self.insert_node_before(node, new_node)def insert_node_before(self, node, new_node):if not self._head or not node or not new_node:returnif self._head == node:self.insert_node_to_head(new_node)returncurrent = self._headwhile current._next and current._next != node:current = current._nextif not current._next: # node is not even in the listreturnnew_node._next = nodecurrent._next = new_nodedef delete_by_node(self, node):if not self._head or not node:returnif node._next:node.data = node._next.datanode._next = node._next._nextreturn# node is the last one or not in the listcurrent = self._headwhile current and current._next != node:current = current._nextif not current: # node not in the listreturncurrent._next = node._nextdef delete_by_value(self, value):if not self._head or not value:returnfake_head = Node(value + 1)fake_head._next = self._headprev, current = fake_head, self._headwhile current:if current.data != value:prev._next = currentprev = prev._nextcurrent = current._nextif prev._next:prev._next = Noneself._head = fake_head._next # in case head.data == valuedef __repr__(self):nums = []current = self._headwhile current:nums.append(current.data)current = current._nextreturn "->".join(str(num) for num in nums)# 重寫__iter__方法,方便for關(guān)鍵字調(diào)用打印值def __iter__(self):node = self._headwhile node:yield node.datanode = node._nextdef print_all(self):current = self._headif current:print(f"{current.data}", end="")current = current._nextwhile current:print(f"->{current.data}", end="")current = current._nextprint("\n", flush=True)if __name__ == "__main__":l = SinglyLinkedList()for i in range(15):l.insert_value_to_head(i)print('==========initialization====================')print('l:',l)node9 = l.find_by_value(9)print('============insert=========================')l.insert_value_before(node9, 20)print('l:', l)l.insert_value_before(node9, 16)l.insert_value_before(node9, 16)print('============delete============================')l.delete_by_value(16)print('l:', l)print('============find=============================')node11 = l.find_by_index(3)l.delete_by_node(node11)l.delete_by_node(l._head)l.delete_by_value(13)print(l)# for value in l:# print(value)總結(jié)
- 上一篇: C++建立队列_利用链表
- 下一篇: 命令行调用VS编译器