切换到链表的上一个节点

时间:2019-01-20 12:49:01

标签: c linked-list

我已经定义了链表的节点,如下所示:

(“下一个”部分指向下一个节点,“上一个”部分指向上一个节点)

typedef struct node{
char val;
struct node* next;
struct node* previous;
}node_t;

我已经像这样初始化了三个节点:

node_t* head=NULL;
head=malloc(sizeof(node_t));
head->val='a';
head->previous=NULL;
head->next=malloc(sizeof(node_t));
head->next->val='b';
head->next->previous=head;
head->next->next=malloc(sizeof(node_t));
head->next->next->val='c';
head->next->next->previous=head->next;
head->next->next->next=NULL;
node_t*current=head;

我的目标是,每当用户键入“ R”时,我们的当前指针将指向下一个节点;每当用户键入“ L”时,我们的当前指针将指向先前的节点,并且每当我们键入“ P”,然后我们可以键入一个字母(字符c)以将该字母作为新节点添加到当前节点之前。

我这部分的代码如下:

char input;
scanf("%c",&input);
if(input=='R'){
       current=current->next;
   }
if(input=='L'){
       current=current->previous;
   }
if(input=='P'){
       char c;
       scanf(" %c",&c);
       node_t * new=malloc(sizeof(node_t));
       new->val=c;
       new->next=current;
       new->previous=current->previous;
       current->previous->next=new;//need help to correct this part
   }

“ R”和“ L”部分可以正常工作,但我不知道为什么“ P”部分不添加节点。

例如:

输入:

R

P j

输出:

jbc

但是此代码的输出仍然是bc。

1 个答案:

答案 0 :(得分:0)

您用于P案的代码不会更改current->next->previous,也不会更改current

您可能还希望考虑可能会更改head的情况。