我有一个程序,应该将其从单链列表更改为双链列表。这意味着我使用指向下一个节点的指针和指向上一个节点的指针。
在回收以前的代码时,我该怎么做。有没有办法以最少的步骤做到这一点?
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
//declaring structure
typedef struct node
{
char songName[20];
int songLength;
int copyright;
struct node * next;
}node;
//prototypes
node *create(int n);
void display_recursive(node *n);
int main()
{
int n = 0;
node *head = NULL;
printf("How many entries?\n");
scanf("%d", &n);
//call to create list
head = create(n);
printf("\nThe linked list in order is:\n");
display_recursive(head);
return 0;
}
node *create(int n)
{
node *head = NULL;
node *temp = NULL;
node *p = NULL;
for (int i = 0; i < n; i++)
{
temp = (node*)malloc(sizeof(node));
printf("What is the name of song %d\n", i + 1);
scanf("%s", &temp->songName);
printf("What is the length of song %d (in seconds)?\n", i + 1);
scanf("%d", &temp->songLength);
printf("Is song %d copyrighted?(1 = YES, 0 = NO)\n", i + 1);
scanf("%d", &temp->copyright);
temp->next = NULL;
if (head == NULL)
{
head = temp;
}
else
{
// if not empty, attach new node at the end
p = head;
while (p->next != NULL)
{
p = p->next;
}
p->next = temp;
}
}
return head;
}
void display_recursive(node *n) {
if (!n) {
return;
}
display_recursive(n->next);
printf("Song: %s, ", n->songName);
printf("%d minutes, ",n->songLength);
if (n->copyright == 1)
{
printf("Copyrights\n");
}
else if (n->copyright == 0)
{
printf("No copyrights\n");
}
}
我真的不知道代码的外观或为实现双向链接列表而必须添加的内容。
答案 0 :(得分:0)
您只需要指向上一个节点的指针
typedef struct node
{
char songName[20];
int songLength;
int copyright;
struct node * next;
struct node* prev;
}node;
答案 1 :(得分:0)
就像@ T1412所说的那样,您需要在结构中添加一个新成员。
typedef struct node
{
char songName[20];
int songLength;
int copyright;
struct node * next;
struct node* prev;
}node
现在您需要修改create()函数,以便每个节点的prev指针都指向上一个节点,而HEAD节点的prev指向NULL。
类似地,您需要修改所有与链表相关的功能以合并prev指针。
答案 2 :(得分:0)
1)强烈建议更改:
typedef struct node
{
char songName[20];
int songLength;
int copyright;
struct node * next;
}node;
收件人:
struct NODE
{
char songName[20];
int songLength;
int copyright;
struct NODE * prev;
struct NODE * next;
};
typedef struct NODE node;
然后在新节点中所链接的代码中的任何地方,添加必要的语句以设置“ prior”字段。请记住,firs节点的“ prior”字段中将包含NULL。