Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

A question in searching a link in a circular list

  1. Mar 18, 2008 #1
    i was told to build a method for which if
    we find the asked value in one of the links we
    return the previous link
    i have built a method that supposedly does it
    the problem is that i was told that this code is wrong because
    we need to check the "this" link seperatly from the FOR loop
    why is that???
    Code (Text):

    public static  Link find(Object x)
    Link p;//current object
    Link t;//previous object
    for (p=Link;(p!=this);p=p.next, t=p)
    {
    if (p.data.equals(x)){
     return t;
     
    }
    return null;
    }
     
     
    Last edited: Mar 18, 2008
  2. jcsd
  3. Mar 18, 2008 #2

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    That isn't valid c++ code.
    - 'this' is doesn't exist in a static member function.
    - There is no left operand for the && operator in the for loop.
     
  4. Mar 18, 2008 #3
    its JAVA not C++
     
  5. Mar 18, 2008 #4

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    The same comments apples to Java. From http://www.owlnet.rice.edu/~tchjava/2002/notes/current/node53.html,
    "&&" is a binary infix conditional operator in Java. Binary: "&&" needs two operands on which to operate. Infix: the two operands go to the left and right of the operator. Conditional: If the left operand is false so is the expression.
     
  6. Mar 18, 2008 #5
    i removed &&


    i changed the post

    the link doesnt talk about linked list


    can you answer my original post??
     
  7. Mar 18, 2008 #6

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    The link talks about using the parameter this in a static method. You cannot do that. Why did you use the word "static" doing at the start of the code? You cannot use this in a static method. You have other errors as well, such as "p=Link". "Link" is a class; I suspect you meant "p=this" instead. Of course, if you do start with "p=this", the code will never enter the loop as written.
     
  8. Mar 18, 2008 #7

    jambaugh

    User Avatar
    Science Advisor
    Gold Member

    One problem that I see is:

    If your first link happens to be the one where you find the value then the t-pointer to the previous link will not yet be assigned.
     
  9. Mar 18, 2008 #8
    ok i ment p=this
    and suppose that its not static
    so what know
    i dont understand this comment
    "if you do start with "p=this", the code will never enter the loop as written"
    its starts with this then in the for loop i say that p=p.next
    so it goes further
    and checks "p" again which represents the next link
    i was told to start the for loop from p=this.next
    and to check "this" object seperatly
    i dont know why???
     
  10. Mar 18, 2008 #9

    D H

    User Avatar
    Staff Emeritus
    Science Advisor

    It is a good idea to trace through code by hand. Doing that with this chunk of code,
    Code (Text):
    for (p=this; p != this; p= p.next) {
      < loop body >
    }
    The variable p is initially set to this. The termination condition is then checked. p is equal to this, so the body of the loop is never entered. Starting with p.next initially prevents this problem, but creates a new one. The body of the loop is never performed with this itself. That is easily rectified in this case as the body of this particular loop is a one-liner.
     
  11. Mar 18, 2008 #10
    ahhhhhhhhhh ok thanks
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: A question in searching a link in a circular list
  1. Linked list (Replies: 12)

Loading...