-1

正如标题所示,我必须遍历一个双向链表。唯一的问题是我必须遍历“n”个元素。

例如,如果给定一个 1 3 2 2 1 1 的列表,我必须根据我所在的值向左或向右迭代:

1 -> 3 -> 1 -> 1。我可以移动与列表中的值相同的值。由于我从 1 开始,我可以向左或向右移动 1 个元素(只能向右移动)。当我降落在 3 上时,我可以向左或向右移动 3 个元素等。

while (temp->next != NULL) {
   //traverse n elements left or right
}

如果我每次只需要遍历 1 个元素,那么它就像

temp = temp->next;

如果有人可以根据节点的值解释遍历“n”个元素的策略,那将不胜感激。

编辑:只有在该方向上有足够的元素时,您才能朝该方向前进。所以在 1 -> 3 的情况下,你只能往右边走 3。

4

1 回答 1

0

我认为您的问题是遍历n 个元素,其中n是当前节点的值。代码会像~

int tr;
while (temp->next != NULL)
{
     tr=temp->data; // temp->data holds the value of the current node.
     Node *leftptr = temp, *rightptr = temp;
     while(tr!=0 && rightptr!=NULL) //moves right side
     {
          rightptr = rightptr->next;
          tr--;
     }
     tr=temp->data;
     while(tr!=0 && leftptr!=NULL) //moves left side
     {
          leftptr = leftptr->prev;
          tr--;
     }
}

给定遍历规则,您可以实现您的算法并选择如何遍历。

于 2015-10-19T17:29:29.130 回答