質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

1266閲覧

クラスを2つならべるときにどこで引数を渡してアウトプットをだしているのか。

sequelanonymous

総合スコア123

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/11/05 12:49

編集2022/01/12 10:55

競技プログラミングのサイトの問題を解いています。しかし、どうも、以下の問題で期待どおりのアウトプットをだせません。クラスの使い方について根本的に間違っているかもしれないと不安になり質問しました。
質問するのもお恥ずかしいぐらい基本的なことだとは思うのですが、お気づきの点ありましたらご指摘頂きますでしょうか?

以下のコードで、その競技プログラミングの方で組み込まれているテストコードは、通ります。

Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.

Given linked list -- head = [4,5,1,9], which looks like following:

(出典元: https://leetcode.com/explore/interview/card/top-interview-questions-easy/93/linked-list/553/)

Input: head = [4,5,1,9], node = 5
Output: [4,1,9]

# Definition for singly-linked list. class ListNode: def __init__(self, x): self.val = x self.next = None class Solution: def deleteNode(self, node): """ :type node: ListNode :rtype: void Do not return anything, modify node in-place instead. """ if node and node.next: node.val = node.next.val node.next = node.next.next

(出典元: https://leetcode.com/explore/interview/card/top-interview-questions-easy/93/linked-list/553/)

実際に実行した結果

head = [4,5,1,9] node = 5 listnode = ListNode(head) Solution.deleteNode(listnode, node) <ipython-input-298-b888872efe5d> in deleteNode(self, node) 1 class Solution: 2 def deleteNode(self, node): ----> 3 node.val = node.next.val 4 node.next = node.next.next 5 AttributeError: 'int' object has no attribute 'next'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2019/11/05 12:52 編集

この質問の投稿がレギュレーション上問題ないことを確認し、問題なければ出典にリンクを張ってください。
sequelanonymous

2019/11/05 12:57

ご指摘ありがとうございます、確認してみます。
y_waiwai

2019/11/05 12:59

期待通りに出せないとはどう出るんでしょうか
ozwk

2019/11/05 13:07

'int' object has no attribute 'next'を読んだ感想をどうぞ
guest

回答1

0

クラスの使い方について根本的に間違っているかもしれないと不安になり質問しました。

間違っているのは確かです。

python

1head = [4,5,1,9] 2node = 5 3listnode = ListNode(head) 4 5Solution.deleteNode(listnode, node) # これインスタンスメソッドとして定義したんじゃないのか……

Solution.deleteNodeは「クラスの属性になっている関数」で、本来はインスタンスメソッドの元になるべきもの(逆にこういう形で呼び出すべきではないもの)です。

実際に実行されている流れとしては、とりあえず引数の数は合うのでそのまま呼び出され、第二引数に渡したグローバル変数のnode5になっているのでnode.next.valを参照しようとしてコケています。こちらも把握するのは難しくないはずです。

投稿2019/11/05 14:01

編集2019/11/05 15:27
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sequelanonymous

2019/11/09 07:18

回答ありがとうございます。大変、助かります。一点ご確認させてください。 > こういう形で呼び出すべきではないもの の理由を教えて頂けませんでしょうか? solution = Solution() solution.deleteNode(listnode, node) と呼び出すべきという意味でしょうか? ここを理解できれば、この問題の本質的な課題を解消できると思いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問