in reply to Perl linked list

The easiest approach would be to review your course material for hints about how to do so.

The second easiest approach is to do this manually for the given example and then encode each step that you do manually into a program.

Maybe the following observations help you analyze the steps to find the length of a linked list:

  1. Each list is finite, that is, it has finitely many nodes and no node is referenced more than once by any next entry.
  2. The length of the empty list is zero.
  3. The length of a list that is not empty is one larger than the length of the list in the next entry.

Replies are listed 'Best First'.
Re^2: Nodes count in Linked List
by Perl_is_Perl (Initiate) on Mar 31, 2015 at 13:14 UTC
    Thanks for your kindly help!

    The thing confuses me is what exact data type $L is in the given question?

    The test data set would be something like

    [ 3,2,2,3,3,3,1 ].

    I don't understand how the data set get passed into @_ and assigned to $L. [ 3,2,2,3,3,3,1 ] seems like an anonymous array to me if assigned to a $scalar . Could you tell me how it assigned to @_ and $L ?

      In common with others, I'm not sure how this question relates to your OP ([ 3,2,2,3,3,3,1 ] doesn't look like a linked list to me, either), but I can answer your specific questions.

      ... what exact data type [is] $L ...

      $L is a scalar. This is determined by the $ sigil before the symbol.

      ... how [does] the data set get passed into @_ and assigned to $L.

      The expression  [ 3,2,2,3,3,3,1 ] returns a reference (to an array). A reference is always a scalar value even though the referent, e.g., an array or hash, is not. A scalar is passed to a subroutine in the usual way:

      c:\@Work\Perl>perl -wMstrict -le "my $arrayref = [ 3,2,2,3,3,3,1 ]; ;; sub func { my ($msg, $ar) = @_; ;; printf qq{$msg: scalar ref: $ar }; printf qq{'$_' } for @$ar; printf qq{(%d elements) \n}, scalar @$ar; } ;; func('A', [ 9, 8, 7 ]); func('B', $arrayref); " A: scalar ref: ARRAY(0x1cb226c) '9' '8' '7' (3 elements) B: scalar ref: ARRAY(0x6fd05c) '3' '2' '2' '3' '3' '3' '1' (7 elements +)

      Update: Changed code example: added element count. Slight wording change.


      Give a man a fish:  <%-(-(-(-<

      What you show as test data seems to contradict what your assignment says what the test data would be.

      Maybe you can review the assignment description and visualize the data as it is described. Note that a "dictionary" is not an "anonymous array".

      [ 3,[2,[2,[3,[3,[3,[1, undef ]]]]]]]].

      But I fear the author if this assignment just lazily copied a task from Lisp and has no big idea what Perl is.

      Cheers Rolf
      (addicted to the Perl Programming Language and ☆☆☆☆ :)

      PS: Je suis Charlie!

        This seems to somewhat run counter to my interpretation of this part of the homework:

        IntList is a dictionary with keys

        I wouldn't interpret anonymous arrays as "dictionary with keys", especially if the keys have the names value and next.