リスト操作の基礎: 要素の削除、リストの設計、およびリストの逆転

リスト理論の基礎

リストノードの定義
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

203. リストから要素を削除する

class Solution:
    def removeElements(self, head, val):
        dummy_head = ListNode(next=head)
        current = dummy_head
        while current.next is not None:
            if current.next.val == val:
                current.next = current.next.next
            else:
                current = current.next
        return dummy_head.next

707. リストの設計

class LinkedListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class MyLinkedList:
    def __init__(self):
        self.dummy_head = LinkedListNode()
        self.size = 0

    def get(self, index):
        if index < 0 or index >= self.size:
            return -1
        current = self.dummy_head.next
        for _ in range(index):
            current = current.next
        return current.val

    def addAtHead(self, val):
        new_node = LinkedListNode(val, self.dummy_head.next)
        self.dummy_head.next = new_node
        self.size += 1

    def addAtTail(self, val):
        new_node = LinkedListNode(val)
        current = self.dummy_head
        while current.next is not None:
            current = current.next
        current.next = new_node
        self.size += 1

    def addAtIndex(self, index, val):
        if 0 <= index <= self.size:
            new_node = LinkedListNode(val)
            current = self.dummy_head
            for _ in range(index):
                current = current.next
            new_node.next = current.next
            current.next = new_node
            self.size += 1

    def deleteAtIndex(self, index):
        if 0 <= index < self.size:
            current = self.dummy_head
            for _ in range(index):
                current = current.next
            current.next = current.next.next
            self.size -= 1

206. リストの逆転

双方向ポインタを使用した方法
class Solution:
    def reverseList(self, head):
        current = head
        previous = None
        while current:
            temp = current.next
            current.next = previous
            previous = current
            current = temp
        return previous
再帰を使用した方法
class Solution:
    def reverseList(self, head):
        return self.reverse(head, None)

    def reverse(self, current, previous):
        if current:
            temp = current.next
            current.next = previous
            return self.reverse(temp, current)
        return previous

タグ: ListNode Python 双方向ポインタ 再帰 リスト操作

7月16日 21:47 投稿