要求将算法7~13设计为3. 4. 1节定义的带头结点

要求将算法7~13设计为3. 4. 1节定义的带头结点单链表LinkedList类的方法。

11.设计算法,将给定的单链表中所有值为偶数的结点放在值为奇数的结点前面。

答案
class LNode:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = LNode(None)   # 头结点

    def even_before_odd(self):
        """偶数结点全部放到奇数结点前面,保持相对次序"""
        even_head = LNode(None)
        odd_head = LNode(None)
        e = even_head   # 偶数链表尾指针
        o = odd_head    # 奇数链表尾指针

        p = self.head.next
        while p is not None:
            if p.data % 2 == 0:
                e.next = p
                e = e.next
            else:
                o.next = p
                o = o.next
            p = p.next

        # 截断尾部,防止成环
        o.next = None
        # 偶数链表尾部接上奇数链表
        e.next = odd_head.next
        # 挂回原链表头结点
        self.head.next = even_head.next

题目信息

题号:8235
题型:简答题
知识点:Python
难度:普通