我已经定义了链表的节点,如下所示:
(“下一个”部分指向下一个节点,“上一个”部分指向上一个节点)
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。
答案 0 :(得分:0)
您用于P案的代码不会更改current->next->previous
,也不会更改current
。
您可能还希望考虑可能会更改head
的情况。