在有序链接列表中插入元素

2024-04-19 14:39:52 发布

您现在位置:Python中文网/ 问答频道 /正文

这个python程序是一个有序链表,用于跟踪行中的名称。我正在努力使用joinFriend函数。我需要在“第一人”后面的位置加上“第二人”。如果第一个不在行中,我必须提供一个错误消息。有人能帮忙吗?我在课堂上做得不太好:'(

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()

Tags: thenameselfnoneaddifdefcurrent
1条回答
网友
1楼 · 发布于 2024-04-19 14:39:52

请用这个试试:

  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

相关问题 更多 >