Example #1
0
def Slist_sort(class1):
    class1_length = class1.length()
    new_Slist = Slist()
    i = 0
    refer1 = class1.head
    while (i < class1_length):
            new_Slist.insert_front(refer1.item)
            refer1 = refer1.next
            i += 1

    return new_Slist.print_list()
Example #2
0
def sorting_by_k(class1, k):
    class1_leng = class1.length()
    i = 0

    more_than = Slist()
    less_than = Slist()

    refer = class1.head

    while i < class1_leng:
        if (refer.item <= k):
            less_than.insert_front(refer.item)
        else:
            more_than.insert_front(refer.item)
        i += 1
        refer = refer.next

    return more_than.print_list(), less_than.print_list()
Example #3
0
from linked_slist import Slist


def find_middle(class1):
    class1_leng = class1.length()
    middle_point = class1_leng // 2
    i = 0
    refer = class1.head
    while i < middle_point:
        refer = refer.next
        i += 1
    return refer.item


s = Slist()
s.insert_front(7)
s.insert_front(3)
s.insert_front(2)
s.insert_front(1)
s.insert_front(0)
s.insert_front(8)
s.print_list()
print(find_middle(s))
Example #4
0
def Slist_sort(class1, class2):
    class1_length = class1.length()
    class2_length = class2.length()
    new_Slist = Slist()
    new_Slist_head = new_Slist.head
    i = 1
    j = 1
    refer1 = class1.head
    refer2 = class2.head
    while (i < class1_length) or (j < class2_length):
        if (refer1.item > refer2.item):
            new_Slist.insert_after(refer1.item, new_Slist_head)
            refer1 = refer1.next
            print(new_Slist_head)
            new_Slist_head = new_Slist.head.next
            i += 1
        else:
            new_Slist.insert_after(refer2.item, new_Slist_head)
            new_Slist_head = new_Slist.head.next
            refer2 = refer2.next
            j += 1

    if i < class1_length:
        while i < class1_length:
            new_Slist.insert_after(refer1.item, refer2)
            refer1 = refer1.next
            i += 1
    else:
        while j < class2_length:
            new_Slist.insert_after(refer2.item, refer1)
            refer2 = refer2.next
            j += 1
    return new_Slist.print_list()
Example #5
0
            new_Slist.insert_after(refer2.item, new_Slist_head)
            new_Slist_head = new_Slist.head.next
            refer2 = refer2.next
            j += 1

    if i < class1_length:
        while i < class1_length:
            new_Slist.insert_after(refer1.item, refer2)
            refer1 = refer1.next
            i += 1
    else:
        while j < class2_length:
            new_Slist.insert_after(refer2.item, refer1)
            refer2 = refer2.next
            j += 1
    return new_Slist.print_list()

if __name__ == '__main__':
    s = Slist()
    s.insert_front(7)
    s.insert_front(3)
    s.insert_front(2)
    s.insert_front(1)
    # print(s.head.next.item)
    e = Slist()
    e.insert_front(9)
    e.insert_front(6)
    e.insert_front(4)
    e.insert_front(0)

    Slist_sort(s, e)
Example #6
0
from linked_slist import Slist


def find_cycle(class1):
    class1_leng = class1.length()
    refer = class1.head
    for i in range(class1_leng):
        if (refer.next == refer):
            return True
        refer = refer.next
    return False


s = Slist()
s.insert_front(7)
s.insert_front(3)
s.insert_front(2)
s.insert_front(1)
s.insert_front(0)
s.insert_front(8)
print(find_cycle(s))
Example #7
0
from linked_slist import Slist


def sorting_by_k(class1, k):
    class1_leng = class1.length()
    i = 0

    more_than = Slist()
    less_than = Slist()

    refer = class1.head

    while i < class1_leng:
        if (refer.item <= k):
            less_than.insert_front(refer.item)
        else:
            more_than.insert_front(refer.item)
        i += 1
        refer = refer.next

    return more_than.print_list(), less_than.print_list()


s = Slist()
s.insert_front(7)
s.insert_front(8)
s.insert_front(3)
s.insert_front(2)
s.insert_front(1)
s.print_list()
sorting_by_k(s, 3)
Example #8
0
    class2_length = class2.length()
    refer1 = class1.head
    i = 0

    while i < class1_length:
        refer2 = class2.head
        j = 0
        while j < class2_length:
            if (refer1.item == refer2.item):
                result += refer1.item
            refer2 = refer2.next
            j += 1
        refer1 = refer1.next
        i += 1
    return result


s = Slist()
s.insert_front(7)
s.insert_front(3)
s.insert_front(2)
s.insert_front(1)
s.print_list()
# print(s.head.next.item)
e = Slist()
e.insert_front(9)
e.insert_front(1)
e.insert_front(7)
e.insert_front(0)
e.print_list()
print(repeat_num_sum(s, e))
Example #9
0
def double_(class1, class2):
    class1_leng = class1.length()
    class2_leng = class2.length()
    result_Slist = Slist()
    result_Slist.insert_front('head')  # 들어온 객체와 똑같이 형식 맞춰주기 위해 'head' 삽입
    result_head = result_Slist.head

    i = class1_leng
    j = class2_leng

    refer1 = class1.head  # 각 'head'
    refer2 = class2.head

    while (i != 1) and (j != 1):  # 객체에서 요소가 하나가 될 때까지
        if (abs(i - j) != 0):  # 만약 두 객체의 길이가 다르다면
            if i > j:  # i가 더 크면 더 큰 자리수에 있는 수를 컨트롤 하기 위해
                i -= 1
                result_Slist.insert_after(
                    refer1.next.item,
                    result_head)  # 더하기를 위해 쓰이지 않는 앞의 숫자들은 새로운 객체 앞으로 먼저 넣음
                refer1 = refer1.next
                result_head = result_head.next
            else:
                j -= 1
                result_Slist.insert_after(refer2.next.item, result_head)
                refer2 = refer2.next
                result_head = result_head.next
            continue

        values_sum = refer1.next.item + refer2.next.item  # 값 더한 후 저장
        if (values_sum > 100):  # 올림 값 추출
            if result_head.item == 'head':  # 앞이 숫자가 아니라 head일 경우
                result_head.item = 1  # 값을 1로 저장
            else:
                result_head.item += 1  # 1을 더해줌
            values_sum -= 100
        result_Slist.insert_after(values_sum, result_head)  # 해당 값 연결리스트에 추가
        refer1 = refer1.next
        refer2 = refer2.next
        result_head = result_head.next  # 다음 숫자로 넘어가기
        i -= 1
        j -= 1

    return result_Slist.print_list()
Example #10
0
        if (values_sum > 100):  # 올림 값 추출
            if result_head.item == 'head':  # 앞이 숫자가 아니라 head일 경우
                result_head.item = 1  # 값을 1로 저장
            else:
                result_head.item += 1  # 1을 더해줌
            values_sum -= 100
        result_Slist.insert_after(values_sum, result_head)  # 해당 값 연결리스트에 추가
        refer1 = refer1.next
        refer2 = refer2.next
        result_head = result_head.next  # 다음 숫자로 넘어가기
        i -= 1
        j -= 1

    return result_Slist.print_list()


s = Slist()
s.insert_front(22)
s.insert_front(0)
s.insert_front(1)
s.insert_front('head')
s.print_list()
e = Slist()
e.insert_front(88)
e.insert_front(99)
e.insert_front(99)
e.insert_front(2)
e.insert_front('head')
e.print_list()
double_(s, e)