python中的pop函数和append函数_Python中的链表-Append、Index、Insert和Pop函数。不确定代码/错误...

下面是我能想到的实现(测试和工作)。这似乎是一个老帖子,但我找不到完整的解决方案,所以张贴在这里。# add -- O(1)

# size -- O(1) & O(n)

# append -- O(1) & O(n)

# search -- O(n)

# remove -- O(n)

# index -- O(n)

# insert -- O(n)

# pop -- O(n) # can be O(1) if we use doubly linked list

# pop(k) -- O(k)

class Node:

def __init__(self, initdata):

self.data = initdata

self.next = None

def getData(self):

return self.data

def getNext(self):

return self.next

def setNext(self, newnext):

self.next = newnext

class UnorderedList:

def __init__(self):

self.head = None

self.tail = None

self.length = 0

def isEmpty(self):

return self.head is None

def add(self, item):

temp = Node(item)

temp.setNext(self.head)

self.head = temp

if self.tail is None:

self.tail = temp

self.length += 1

def ssize(self): # This is O(n)

current = self.head

count = 0

while current is not None:

count += 1

current = current.getNext()

return count

def size(self): # This is O(1)

return self.length

def search(self, item):

current = self.head

found = False

while current is not None and not found:

if current.getData() == item:

found = True

else:

current = current.getNext()

return found

def remove(self,item):

current = self.head

previous = None

found = False

while current is not None and not found:

if current.getData() == item:

found = True

else:

previous = current

current = current.getNext()

if previous == None:

# The item is the 1st item

self.head = current.getNext()

else:

if current.getNext() is None:

self.tail = previous # in case the current tail is removed

previous.setNext(current.getNext())

self.length -= 1

def __str__(self):

current = self.head

string = '['

while current is not None:

string += str(current.getData())

if current.getNext() is not None:

string += ', '

current = current.getNext()

string += ']'

return string

def sappend(self, item): # This is O(n) time complexity

current = self.head

if current:

while current.getNext() is not None:

current = current.getNext()

current.setNext(Node(item))

else:

self.head = Node(item)

def append(self, item): # This is O(1) time complexity

temp = Node(item)

last = self.tail

if last:

last.setNext(temp)

else:

self.head = temp

self.tail = temp

self.length += 1

def insert(self, index, item):

temp = Node(item)

current = self.head

previous = None

count = 0

found = False

if index > self.length-1:

raise IndexError('List Index Out Of Range')

while current is not None and not found:

if count == index:

found = True

else:

previous = current

current = current.getNext()

count += 1

if previous is None:

temp.setNext(self.head)

self.head = temp

else:

temp.setNext(current)

previous.setNext(temp)

self.length += 1

def index(self, item):

pos = 0

current = self.head

found = False

while current is not None and not found:

if current.getData() == item:

found = True

else:

current = current.getNext()

pos += 1

if not found:

raise ValueError('Value not present in the List')

return pos

def pop(self, index=None):

if index is None:

index = self.length-1

if index > self.length-1:

raise IndexError('List Index Out Of Range')

current = self.head

previous = None

found = False

if current:

count = 0

while current.getNext() is not None and not found:

if count == index:

found = True

else:

previous = current

current = current.getNext()

count += 1

if previous is None:

self.head = current.getNext()

if current.getNext() is None:

self.tail = current.getNext()

else:

self.tail = previous

previous.setNext(current.getNext())

self.length -= 1

return current.getData()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值