链接列表操作

时间:2015-04-18 22:10:12

标签: python

你好我需要帮助试图弄清楚这三个功能。我是python的新手。

分配:

  • createList(srcSeq) - 根据值
    创建链接列表 包含在srcSeq序列结构中并返回头部 新链表的参考。这些值将在一个加上一个 通过将它们添加到链表中的时间。 myValues = [5,12,82,
    32,20] myList = createList(myValues)
  • size(theList) - 给出了 head reference(theList),返回元素的数量 链表。
  • printList(theList) - 给出头部引用
    (列表),从前到后打印链表中的值 所有在一行上的值用逗号分隔。
  • valueAt(theList,index) - 返回节点中包含的值 第一个值位于0的给定索引位置 在位置1处排名第二,依此类推。如果索引超出范围,则返回
    没有。
  • append(theList,value) - 在结尾附加一个新值 链表。假设列表包含至少一个节点。
  • concat(listA,listB) - 通过
    加入或连接两个链接列表 将listA的最后一个节点链接到listB的第一个节点。
  • split(theList) - 给定头部引用(theList),分割
    将列表链接成两半以创建两个较小的链接列表。头部 从列表的后半部分创建的链接列表的引用 退回。假设列表包含至少一个节点。如果有 在链表中奇数个节点,额外节点可以是
    放在两个新列表中的任何一个。

对于追加,concat,我只是这样做。我不知道怎么做拆分方法:

  def append (theList, value):
      current = self.head
      while current.self.next != None:
          current = self.next
      current.newnode

  def concat(listA, listB):
      if listA.tail == None:
          listA.head = listB.head
      else:
          listA.tail.next = listB.head
      elif listB.head != None:
          listA.tail = listB.tail

我的整个代码:

  def createList( self ):
      self.head = None
      temp = ListNode( value )
      self.next = newnext
      temp.self.next(self.head)
      self.head = temp
      return self.head

  def size( theList ):
      current = self.head
      count = 0
      while current != None:
          count = count + 1
          current = current.self.next

      return count

  def printList( theList ):
      node = self.head
      while node:
          print self.value
          node = self.next

  def valueAt( theList, index ):
      current = head
      count = 0
      while current != None:
          if count == index:
              return current

  def append( theList, value ):
      current = self.head
      while current.self.next != None:
          current = self.next
      current.newnode


  def concat( listA, listB ):
      if listA.tail == None:
          listA.head = listB.head
      else:
          listA.tail.next = listB.head
      elif listB.head != None:
          listA.tail = listB.tail


  def split( theList ):
      pass

1 个答案:

答案 0 :(得分:2)

我认为你的问题不明确。但是我们有:

拆分单链表:

def split( head ):
    middle = head
    current = head
    index = 0
    while current.next != None:
        if index % 2:
            middle = middle.next
        current = current.next
        index += 1
    result = middle.next
    middle.next = None
    return result

但说实话,到目前为止你的错误还有很多。

如果这些列表是Python列表,解决方案将非常简单:

def split(a):
    return a[:len(a)/2], a[len(a)/2:]

现在有些解释:):

该函数返回两个列表的元组,其中每个列表是提供列表 a 的一半。 我上面使用的是slicing,您可以将冒号字符视为一词,直到。您可以提供由分号分隔的两个_arguments 开头结束

示例时间!

a = [1,2,3,4,5]

a[:2]    == [1,2]
a[2:]    == [3,4,5]
a[1:3]   == [2,3,4]
a[2,-2]  == [3]
a[-3,-2] == [3,4]

不是很好吗?它是免费的!一个额外的技巧,如果你想制作一个列表的副本,你也可以通过切片来做到这一点!

b = a[:]

砰的一声,完成了! :)

还有更多切片,你可以有两个冒号,但那是另一个时间的故事。

PS:
出于好奇,我做了你的功课:)

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

    def __str__(self, *args, **kwargs):
        return str(self.data)


def create_list(iterable):
    next_node = current_node = None
    for item in iterable:
        current_node = Node(item)
        current_node.next = next_node
        next_node = current_node
    return current_node


def size(head):
    count = 0
    while head:
        head = head.next
        count += 1
    return count


def print_list(head):
    while head:
        print(head, end="")
        if head.next:
            print(" > ", end="")
        head = head.next
    print(flush=True)
    pass


def value_at(head, index):
    while (head):
        if index < 1:
            return head
        index -= 1
        head = head.next
    return None


def append(head, value):
    while head:
        if not head.next:
            head.next = Node(value)
            return
        head = head.next


def concat(headA, headB):
    while headA:
        if not headA.next:
            headA.next = headB
            return
        headA = headA.next


def split(head):
    center = head
    index = 0
    while head:
        if index % 2:
            center = center.next
        head = head.next
        index += 1
    headB = center.next
    center.next = None
    return headB


def main():
    a = create_list([1, 2, 3, 4, 5, 6, 7, 8, 9])
    print("Print list::")
    print_list(a)
    print("\nSize:")
    print(size(a))
    print("\nValue at:")
    print("a[-1]: %d" % value_at(a, -1).data)
    print("a[0]: %d" % value_at(a, 0).data)
    print("a[1]: %d" % value_at(a, 1).data)
    print("a[5]: %d" % value_at(a, 5).data)
    print("a[8]: %d" % value_at(a, 8).data)
    # print("value @ 9 %d"% value_at(my_head,9).data)
    print("\nAppend (10):")
    print_list(a)
    append(a, 10)
    print_list(a)
    print("\nConcat a, b:")
    print_list(a)
    b = create_list([11, 12, 13])
    print_list(b)
    concat(a, b)
    print_list(a)
    print("\nSplit:")
    print_list(a)
    print("..into..")
    b = split(a)
    print_list(a)
    print("Size a: %d" % size(a))
    print_list(b)
    print("Size b: %d" % size(b))


if __name__ == "__main__":
    main()