首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中的排序链表

Python中的排序链表
EN

Stack Overflow用户
提问于 2013-10-07 13:28:52
回答 5查看 26.7K关注 0票数 4

我在弄清楚如何在Python中对单链表进行排序时遇到了一些麻烦。我已经知道如何创建一个链表并将数据推入其中,但是我如何以排序的格式推送它(而不是在所有数据都被推送到链表中之后进行排序),或者只是以任何方式对其进行排序呢?

目标

根据用户输入创建一个排序的数字单向链接表。程序逻辑:要求输入一个数字,将该数字添加到列表中的排序位置,打印该列表。重复以上步骤,直到他们输入-1作为数字。

当前代码

代码语言:javascript
复制
#!/usr/bin/env python

class node:
    def __init__(self):
        self.data = None # contains the data
        self.next = None # contains the reference to the next node


class linked_list:
    def __init__(self):
        self.cur_node = None

    def add_node(self, data):
        new_node = node() # create a new node
        new_node.data = data
        new_node.next = self.cur_node # link the new node to the 'previous' node.
        self.cur_node = new_node #  set the current node to the new one.

    def list_print(self):
        node = self.cur_node # cant point to ll!
        while node:
            print(node.data)
            node = node.next


def main():
  ll = linked_list()

  num=int(input("Enter a num to push onto the list, -1 to stop: "))
  while num!=-1:
    data=num
    ll.add_node(data)
    num=int(input("Enter a num to push onto the list, -1 to stop: "))

  print("\n")
  ll.list_print()
main()

我真的被困在这里了。提前感谢您的帮助!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-10-07 13:52:56

这应该可以做到这一点:

代码语言:javascript
复制
class Node:
  def __init__(self):
    self.data = None
    self.next = None

class LinkedList:
  def __init__(self):
    self.head = None

  def addNode(self, data):
    curr = self.head
    if curr is None:
      n = Node()
      n.data = data
      self.head = n
      return

    if curr.data > data:
      n = Node()
      n.data = data
      n.next = curr
      self.head = n
      return

    while curr.next is not None:
      if curr.next.data > data:
        break
      curr = curr.next
    n = Node()
    n.data = data
    n.next = curr.next
    curr.next = n
    return

  def __str__(self):
    data = []
    curr = self.head
    while curr is not None:
      data.append(curr.data)
      curr = curr.next
    return "[%s]" %(', '.join(str(i) for i in data))

  def __repr__(self):
    return self.__str__()

def main():
  ll = LinkedList()
  num = int(input("Enter a number: "))
  while num != -1:
    ll.addNode(num)
    num = int(input("Enter a number: "))
  c = ll.head
  while c is not None:
    print(c.data)
    c = c.next

给予

代码语言:javascript
复制
>>> main()
Enter a number: 5
Enter a number: 3
Enter a number: 2
Enter a number: 4
Enter a number: 1
Enter a number: -1
1
2
3
4
5
票数 11
EN

Stack Overflow用户

发布于 2019-10-04 09:53:28

代码语言:javascript
复制
class Node:
    def __init__(self, data):
        self.data = int(data)
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None    

    def asc_ordered_list(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return

        temp = self.head
        if temp.data > data:
            new_node.next = temp
            self.head = new_node
            return

        while temp.next:
            if temp.next.data > data:
                break
            temp = temp.next

        new_node.next = temp.next
        temp.next = new_node

    def desc_ordered_list(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return

        temp = self.head
        if data > temp.data:
            new_node.next = temp
            self.head = new_node
            return

        while temp.next:
             if temp.data > data and temp.next.data < data:
                 break
             temp = temp.next

        new_node.next = temp.next
        temp.next = new_node

    def display_list(self):
        temp = self.head
        while temp is not None:
            print("data = {0}".format(temp.data))
            temp = temp.next

if __name__ == "__main__":
    llist = LinkedList()
    llist.desc_ordered_list(8)
    llist.desc_ordered_list(3)
    llist.desc_ordered_list(1)
    llist.desc_ordered_list(4)
    llist.desc_ordered_list(5)
    llist.desc_ordered_list(7)
    llist.desc_ordered_list(6)
    llist.desc_ordered_list(2) 
    llist.display_list()
票数 3
EN

Stack Overflow用户

发布于 2021-01-27 17:19:17

代码语言:javascript
复制
class Solution:
    def sortList(self,node):

        if(node is None):
            return
        temp=node
        while(temp!=None):
            i=temp.next
            while(i!=None):
                if(temp.data>i.data):
                    n=i.data
                    i.data=temp.data
                    temp.data=n
                i=i.next
            temp=temp.next
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19217647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档