Python-剑指Offer(一):python实现链表的基础操作

1.定义链表节点类

定义链表中每个节点类ListNode,val表示链表节点的取值,next表示该节点下一跳的位置。

class ListNode(object):
    def __init__(self, val, next_node):
        self.val = val
        self.next = next_node

2.定义链表类,并完成基本方法

定义链表类LinkList,head标注该链表的头节点。并实现链表基础操作。
create_list(self, data):初始化链表,data为数组形式。
remove_list_node(self, data):删除链表中节点取值为data的节点,data为单个取值。
print_list(self):遍历打印链表。
add_node(self, key, data):向链表中添加元素,在链表中取值为key的节点后,添加取值为data的节点。

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

    def create_list(self, data):
        self.head = ListNode(data[0], None)
        p = self.head
        for i, d in enumerate(data):
            if i != 0:
                p.next = ListNode(d, None)
                p = p.next

    def remove_list_node(self, data):
        p = self.head
        if self.head.val == data:
            self.head = self.head.next
            return True
        while p.next is not None:
            if p.next.val == data:
                q = p.next
                p.next = q.next
                del q
                return True
            p = p.next

    def print_list(self):
        p = self.head
        while p is not None:
            print(p.val, end='')
            p = p.next
        print(' ')

    def add_node(self, key, data):
        p = self.head
        while p is not None:
            if p.val == key:
                q = p.next
                p.next = ListNode(data, q)
                return True
            p = p.next

3.实例化链表,测试用例


data1 = [1, 2, 4, 5, 6]

L = LinkList()
L.create_list(data1)
L.print_list()
L.remove_list_node(1)
L.add_node(1, 2)
L.add_node(2, 3)
L.print_list()

输出结果为:

12456 
23456

你可能感兴趣的:(剑指Offer)