如何遍历C中双向链表中的n个元素?

时间:2015-10-19 17:15:50

标签: c algorithm data-structures doubly-linked-list ansi-c

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

例如,如果我给出了1 3 2 2 1 1的列表,我必须向左或向右迭代,具体取决于I' m的值:

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

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

如果我一直只需要遍历1个元素,那就像

一样简单
temp = temp->next;

如果有人可以解释遍历 元素取决于节点的价值,非常感谢。

编辑:如果该方向上有足够的元素,您只能朝着方向前进。所以在1 - >的情况下3,你只能在3之后去。

1 个答案:

答案 0 :(得分: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--;
     }
}

在给定两个遍历规则的情况下,您可以实现算法并选择如何遍历。