欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

链表中翻转

程序员文章站 2022-05-28 13:07:27
...

链表中翻转

描述

 

给定一个单向链表,要求将第m位到第n位(从0开始编号位数)的元素翻转过来。

注1:m和n一定都在链表长度内

注2:待翻转的元素包括第m和n位

输入

 

两行数据

第一行为链表元素,用空格隔开各个元素

第二行有两个数字,分别是m和n

注:链表元素个数最大为1000

输出

 

翻转后的链表结果

元素之间用->表示连接方向

输入样例 1 

1 2 3 4 5 6 7
2 5

输出样例 1

1->2->6->5->4->3->7

输入样例 2 

1 2 3 4 5 6 7
0 1

输出样例 2

2->1->3->4->5->6->7

提示

一定注意各种边界情况

class IntNode(object):
    def __init__(self, i, n):
        self.item = i
        self.next = n
        
class SLList(object):
    def __init__(self, x):
        self.__first = IntNode(x, None)
        self.__last = self.__first #记录最后一个节点的位置
        self.__second_last = None
        self.__size = 1
        
    def add_first(self, x):
        self.__first = IntNode(x, self.__first)
        self.__size += 1
        
    def get_first(self):
        return self.__first.item
        
    def add_last(self, x):
        self.__second_last = self.__last
        self.__last = IntNode(x, None)
        self.__second_last.next = self.__last        
        self.__size += 1
        
    def size(self):
        return self.__size
        
    def printList(self): #按格式打印出所有节点
        p = self.__first
        while p.next is not None:
            print(p.item, end="") #end="" 表示不换行
            print("->", end="")
            p = p.next
            
        print(p.item)
        
    def reverse(self, m, n):
        p1 = self.__first
        count = 0
        while count<m-1:
            p1 = p1.next
            count += 1
        if m==0:
            left_tail = None
            new_tail = p1
        else:
            left_tail = p1
            p1 = p1.next
            new_tail = p1
            count += 1

        pre = p1
        if p1.next is not None:
            current = p1.next
            p1 = current.next
            count += 1
            while count<=n:
                current.next = pre
                pre = current
                current = p1
                if p1 is not None:
                    p1 = p1.next
                count += 1
            if left_tail is not None:
                left_tail.next = pre
            else:
                self.__first = pre
            new_tail.next = current

s = input() 
s_list = s.split(' ')

start, end = map(int, input().split())

l = SLList(s_list[0]) #第一个节点
for item in s_list[1:]: #将数据存储在链表中
    l.add_last(item)

'''
print(start)
print(end)
'''

l.reverse(start, end)
l.printList()

 

上一篇: 选择排序

下一篇: slam(第7讲)