992週間の航行-2つのソート・リストをマージ
4360 ワード
Today I learned
2022/01/17
回顧録
航行99、アルゴリズム1週目
教材:Pythonアルゴリズムインタビュー
第8章接続リスト
リンクリストとは?
接続リスト、リンクリスト(linklist)は、ノードごとに1行のデータとポインタを持つようにデータを格納するデータ構造である.名前の通り、データを含むノードが接続され、ノード上のポインタが次のノードまたは前のノードとの接続を担当します.
ノード実装
削除
[5] -> [12] -> [8]
----[6]----
上記のような1番目のノード[6]を削除する場合は、前のノード[5]のnextを[12]に直接接続することができる.
You are given the heads of two sorted linked lists list1 and list2.
Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists.
Return the head of the merged linked list.
Example 1:
Input: list1 = [1,2,4], list2 = [1,3,4]
Output: [1,1,2,3,4,4]
Example 2:
Input: list1 = [], list2 = []
Output: []
Example 3:
Input: list1 = [], list2 = [0]
Output: [0]
Constraints:
The number of nodes in both lists is in the range [0, 50].
-100 <= Node.val <= 100
Both list1 and list2 are sorted in non-decreasing order.
https://leetcode.com/problems/reverse-linked-list/
には複文を利用した解釈があるが,複文訓練にはまだ慣れていないため,条件文ごとに論理を実現し,複文を繰り返した.
練習を重ねる
2022/01/17
回顧録
1/17
航行99、アルゴリズム1週目
教材:Pythonアルゴリズムインタビュー
第8章接続リスト
1.理論
リンクリストとは?
接続リスト、リンクリスト(linklist)は、ノードごとに1行のデータとポインタを持つようにデータを格納するデータ構造である.名前の通り、データを含むノードが接続され、ノード上のポインタが次のノードまたは前のノードとの接続を担当します.
ノード実装
class Node:
def __init__(self, data):
self.data = data
self.next = None
リンクリストの実装class LinkedList:
def __init__(self, data):
self.head = Node(data)
#헤더부터 탐색해 뒤에 새로운 노드 추가하기
def append(self, data):
cur = self.head
while cur.next is not None:
cur = cur.next
cur.next = Node(data)
#모든 노드 값 출력
def print_all(self):
cur = self.head
while cur is not None:
print(cur.data)
cur = cur.next
ノードインデックスの取得 def get_node(self, index):
cnt = 0
node = self.head
while cnt < index:
cnt += 1
node = node.next
return node
挿入 def add_node(self, index, value):
new_node = Node(value)
if index == 0:
new_node.next = self.head
self.head = new_node
return
node = self.get_node(index-1)
next_node = node.next
node.next = new_node
new_node.next = next_node
[5]->「[12]->「[8][5]->「[6]->「[12]->「[8]を作成するために、インデックス1ビットの12に入るために、5ノードの位置を決定し、6ノードを接続する.[6]のnextは12に接続しなければならない.削除
def delete_node(self, index):
if index == 0:
self.head = self.head.next
return
node = self.get_node(index-1)
node.next = node.next.next
削除は簡単です.[5]->「[6]->「[12]->「[8]では、削除するインデックスの2番目のノードの前のノードを見つけ、次のノードに接続します.[5] -> [12] -> [8]
----[6]----
上記のような1番目のノード[6]を削除する場合は、前のノード[5]のnextを[12]に直接接続することができる.
2.質問
You are given the heads of two sorted linked lists list1 and list2.
Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists.
Return the head of the merged linked list.
Example 1:
Input: list1 = [1,2,4], list2 = [1,3,4]
Output: [1,1,2,3,4,4]
Example 2:
Input: list1 = [], list2 = []
Output: []
Example 3:
Input: list1 = [], list2 = [0]
Output: [0]
Constraints:
The number of nodes in both lists is in the range [0, 50].
-100 <= Node.val <= 100
Both list1 and list2 are sorted in non-decreasing order.
https://leetcode.com/problems/reverse-linked-list/
3. MySol
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def merge_with_sort(list1: ListNode, list2: ListNode):
list = []
curr = list1
curr2 = list2
while True:
if curr is None:
list.append(curr2.val)
curr2=curr2.next
elif curr2 is None:
list.append(curr.val)
curr=curr.next
elif curr.val == curr2.val :
list.append(curr.val)
list.append(curr2.val)
curr=curr.next
curr2=curr2.next
elif curr.val < curr2.val :
list.append(curr.val)
curr=curr.next
else :
list.append(curr2.val)
curr2=curr2.next
if curr is None and curr2 is None:
break
return list
if __name__ == '__main__':
arr2_third_node = ListNode(4, None)
arr2_second_node = ListNode(3, arr2_third_node)
arr2_first_node = ListNode(1, arr2_second_node)
arr1_third_node = ListNode(3,None)
arr1_second_node = ListNode(2,arr1_third_node)
arr1_first_node = ListNode(1,arr1_second_node)
result = merge_with_sort(arr1_first_node, arr2_first_node)
print('result : ' + str(result))
4.学んだこと
5.総評
練習を重ねる
Reference
この問題について(992週間の航行-2つのソート・リストをマージ), 我々は、より多くの情報をここで見つけました https://velog.io/@jsw4215/항해99-2주차-두-정렬-리스트의-병합テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol