旋转链表(python实现)
題目描述:
給定一個(gè)鏈表,旋轉(zhuǎn)鏈表,將鏈表每個(gè)節(jié)點(diǎn)向右移動(dòng) k 個(gè)位置,其中 k 是非負(fù)數(shù)。
示例 1:
輸入: 1->2->3->4->5->NULL, k = 2
輸出: 4->5->1->2->3->NULL
解釋:
向右旋轉(zhuǎn) 1 步: 5->1->2->3->4->NULL
向右旋轉(zhuǎn) 2 步: 4->5->1->2->3->NULL
示例 2:
輸入: 0->1->2->NULL, k = 4
輸出: 2->0->1->NULL
解釋:
向右旋轉(zhuǎn) 1 步: 2->0->1->NULL
向右旋轉(zhuǎn) 2 步: 1->2->0->NULL
向右旋轉(zhuǎn) 3 步: 0->1->2->NULL
向右旋轉(zhuǎn) 4 步: 2->0->1->NULL
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/rotate-list
思路:
1、調(diào)用自定義python鏈表模塊
2、將鏈表首位相連
3、移動(dòng)指定步數(shù)
4、將鏈表斷開,最后一個(gè)節(jié)點(diǎn)指向None
代碼:
import chaintable as cclass Solution(c.chainTable):def __init__(self,chain,k):self.chain=chainself.result=self.rotateRight(self.chain,k)def rotateRight(self,chain,k):Index=0node=chain.headwhile node.next_node and Index<chain.length:node=node.next_nodeIndex+=1if Index==chain.length:node.next_node=chain.headitem=[]pace=[]for i in range(chain.length):item.append(chain.getItem(i))pace.append((i+int(k))%chain.length)for i in range(chain.length):chain.update(pace[i],item[i])Index=0node=chain.headwhile node.next_node and Index<chain.length:node=node.next_nodeIndex+=1if Index==chain.length:node.next_node=Nonereturn chainif __name__=='__main__':chain_str=input("請(qǐng)輸入鏈表:")k=input("請(qǐng)輸入移動(dòng)步數(shù):")chain=c.chainTable()for i in chain_str:chain.append(i)print("原鏈表:")print(chain)solution=Solution(chain,k)print("移動(dòng)后:")result=solution.resultprint(result)運(yùn)行結(jié)果:
請(qǐng)輸入鏈表:12345
請(qǐng)輸入移動(dòng)步數(shù):2
原鏈表:
1->2->3->4->5->None
移動(dòng)后:
4->5->1->2->3->None
chaintable模塊:
#用python實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)鏈表class Node:'''定義節(jié)點(diǎn)類data:節(jié)點(diǎn)保存的數(shù)據(jù)next_node:下一個(gè)節(jié)點(diǎn)對(duì)象'''def __init__(self,data,pnext=None):self.data=dataself.next_node=pnextdef __repr__(self):'''定義Node的字符輸出print為輸出data'''return str(self.data) ''' 鏈表類: 屬性: 鏈表頭:head 鏈表長(zhǎng)度:length 方法:以下 ''' class chainTable:def __init__(self):self.head=Noneself.length=0'判斷是否為空列表'def isEmpty(self):return self.length==0'在鏈表尾增加一個(gè)節(jié)點(diǎn)'def append(self,dataorNode):item = Noneif isinstance(dataorNode, Node):item = dataorNodeelse:item = Node(dataorNode)if not self.head:self.head=itemself.length+=1else:node=self.head'循環(huán)至最后一個(gè)節(jié)點(diǎn)'while node.next_node:node=node.next_nodenode.next_node=itemself.length+=1'刪除一個(gè)節(jié)點(diǎn)'def delete(self,index):if self.isEmpty():print("Sorry,the chain table is empty")returnif index<0 or index>=self.length:print("Error:out of index")returnif index==0:self.head=self.head.next_nodeself.length-=1returnIndex=0node=self.headpre_node=self.headwhile node.next_node and Index<index:pre_node=nodenode=node.next_nodeIndex+=1if Index==index:pre_node=node.next_nodeself.length-=1'修改一個(gè)節(jié)點(diǎn)'def update(self,index,data):if self.isEmpty()or index<0 or index>=self.length:print("Error:out of index")returnIndex=0node=self.headwhile node.next_node and Index<index:node=node.next_nodeIndex+=1if Index==index:node.data=data'查找并得到一個(gè)節(jié)點(diǎn)'def getItem(self,index):if self.isEmpty()or index<0 or index>=self.length:print("Error:out of index")returnIndex=0node=self.headwhile node.next_node and Index<index:node=node.next_nodeIndex+=1return node.data'查找一個(gè)節(jié)點(diǎn)的索引'def getIndex(self,data):if self.isEmpty():print("Sorry,the chain table is empty")returnIndex=0node=self.headwhile node:if node.data==data:return Indexnode=node.next_nodeIndex+=1if Index==self.length:print("\"%s is not found\",%str(data)")return'插入一個(gè)節(jié)點(diǎn)'def Insert(self,index,dataorNode):if self.isEmpty():print("Sorry,the chain table is empty")returnif index<0 or index>=self.length:print("Error:out of index")returnitem=Noneif isinstance(dataorNode,Node):item=dataorNodeelse:item=Node(dataorNode)if index==0:item.next_node=self.headself.head=itemself.length+=1returnIndex=0node=self.headprev=self.headwhile node.next_node and Index<index:prev=nodenode=node.next_nodeIndex+=1if Index==index:item.next_node=nodeprev.next_node=itemself.length+=1'清空鏈表'def clear(self):self.head=Noneself.length=0def __repr__(self):if self.isEmpty():return "The chain table is empty"node=self.headnlist=''while node:if node.next_node:nlist+=str(node.data)+'->'node=node.next_nodeelse:nlist+=str(node.data)+'->None'node=node.next_nodereturn nlistdef __getitem__(self, ind):if self.isEmpty() or ind < 0 or ind >= self.length:print("error: out of index")returnreturn self.getItem(ind)def __setitem__(self, ind, val):if self.isEmpty() or ind < 0 or ind >= self.length:print("error: out of index")returnself.update(ind, val)def __len__(self):return self.length總結(jié)
以上是生活随笔為你收集整理的旋转链表(python实现)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人工智能的发展前景怎么样?有哪些方向?
- 下一篇: python链表详细教程_详细介绍pyt