【问题标题】:Inserting an element in an ordered linked list在有序链表中插入元素
【发布时间】:2014-10-07 00:18:37
【问题描述】:

这个 python 程序是一个有序链表,用于跟踪一行中的名称。我正在努力使用 joinFriend 功能。我需要在“person first”之后的位置添加“person second”。如果 first 不在行中,我必须提供一条错误消息。任何人都可以帮忙吗?我在类方面做得不是很好:'(

class PersonList(object):
#constructor initializes both instance variables
    def __init__(self, name):
        self.name = name
        self.next = None

    def getName(self):
    #returns the name of the person
        return self.name
    def getNext(self):
    #returns a PersonList object with the next person in line
        return self.next

    def setName(self, newname):
        self.name = newname
    def setNext(self, newnext):
        self.next = newnext

#Line class
class Line(object):
    def __init__(self):
        self.head = None

    def isEmpty(self):
        #constructor initializes an empty linked list
        return self.head == None

    def __str__(self):
    #prints the people currently in line, in order,
        #with a number indicating their position
        current = self.head
        string = ''
        count = 0
        while current != None:
            count = count + 1
            string += str(count) + " " + current.getName() + "\n"
            current = current.getNext()
        return string

    def add(self,name):
    #adds a person to the END of the line
        current = self.head        
        temp = PersonList(name)        
        if current == None:
            self.head = temp
        else:
            while current.getNext() != None:
                current = current.getNext()                
            current.setNext(temp)

    def remove(self, name):
    #removes a person from the line
        current = self.head
        previous = None
        found = False
        while not found:
            if current.getName() == name:
                found = True
            else:
                previous = current
                current = current.getNext()

        if previous == None:
            self.head = current.getNext()
        else:
            previous.setNext(current.getNext())

    def joinFriend(first, second):
        current = self.head
        previous = None
        found = False
        while not found:
            if current.getName() == first:
                found = True
            else:
                previous = current
                current = current.getNext()

        second = PersonList(name)
        if previous == None:
            temp.setNext(self.head)
            self.head = temp
        else:
            temp.setNext(current)
            previous.setNext(second)


def main():
    ln = Line()
    ln.add("John")
    ln.add("Mary")
    ln.add("Alec")
    ln.add("Celia")
    ln.remove("Mary")
    ln.joinFriend("John", "Mike")
    ln.joinFriend("Celia", "Jim")
    print(ln)

main()

【问题讨论】:

标签: python list data-structures


【解决方案1】:

请试试这个:

  def joinFriend(self, first, second):
      current = self.head
      previous = None
      found = False
      while not found:
          try:
              if current.getName() == first:
                  found = True
              else:
                  previous = current
                  current = previous.getNext()
          except Exception:
              print "Error: First person [%s] not found in the list" % first
              sys.exit(1)

      temp = PersonList(second)
      next_item = current.getNext()
      current.setNext(temp)
      temp.setNext(next_item)

输出:

1 John
2 Mike
3 Alec
4 Celia
5 Jim

输出:(有例外)

ln.joinFriend("James", "Jim")

Error: First person [James] not found in the list

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 2018-08-02
    • 2016-05-20
    相关资源
    最近更新 更多