вставка элемента в связанный список - PullRequest
1 голос
/ 04 сентября 2011

Рассматривает связанный список, содержащий пять элементов.1, 2, 3, 4, 5 «нет» следует вставлять после двух.у нас будет голова, указывающая на первый элемент связанного списка и ptr на последний.при вставке элемента до 3 мы будем перебирать связанный список, начиная с заголовка и заканчивая последним, и введем еще один указатель (prev) для хранения предыдущих указателей address.ptr будет указывать на текущий узел и, если найдены соответствующие данные (3) тогда мы должны включить новый узел между 2 и 3. Мы можем сделать это, как у нас есть предыдущий указатель. Как сделать это без использования предыдущего указателя.

РЕДАКТИРОВАНИЕ:

#include<stdio.h>
#include<stdlib.h>
struct list
{
    int data;
    struct list* link;
};

struct list *head=NULL;
struct list *tail=NULL;

void createList(int value);
void displayList(struct list* head_node);
void insertNewNode();
int value;


int main()
{
    int i;
    for(i=0;i<5;i++)
    {
     printf("\nEnter the data to be added into the list:\n");
     scanf("%d",&value);
     createList(value);
    }
    printf("\nCreated Linked list is\n");
    //displayList(head);
    printf("\nInsert a node\n");
    insertNewNode();
    displayList(head);
    return 0;
}
void insertNewNode()
{
    int val;
    struct list* ptr=NULL,*new_node,*prev=NULL;
    new_node = (struct list*)malloc(sizeof(struct list));
    printf("Enter the data to be inserted!");
    scanf("%d",&val);

    for(ptr=head;ptr;ptr=ptr->link)
    {
        if(ptr->data == 3)
        {
          printf("Found");
          new_node->data = val;
          prev->link=new_node;
          new_node->link = ptr;
        }
        prev = ptr;
    }
}
void createList(int value)
{
    struct list *newNode;
    newNode = (struct list*)malloc(sizeof(struct list));
    //tail = (struct list*)malloc(sizeof(struct list));
    newNode->data = value;
    if(head == NULL)
    {
        head = newNode;
    }
    else 
    {
        tail->link = newNode;
    }
    tail = newNode;
    tail->link = NULL;
}
void displayList(struct list *head_node)
{
    struct list *i;
    for(i=head;i;i=i->link)
    {
        printf("%d",i->data);
        printf(" ");
    }
    printf("\n");
}

Ответы [ 2 ]

2 голосов
/ 05 сентября 2011
void insertNewNode()
{
    int val;
    struct list* ptr=NULL,*new_node;
    new_node = (struct list*)malloc(sizeof(struct list));
    printf("Enter the data to be inserted!");
    scanf("%d",&val);

    for(ptr=head;ptr;ptr=ptr->link)
    {
        if(ptr->data == 2)
        {
          printf("Found");
          new_node->data = val;
          new_node->link = ptr->link;
          ptr->link = new_node;
        }
    }
}

Обновление: это, вероятно, то, что вы хотите:

void insertNewNode()
{
    int val;
    struct list* ptr=NULL,*new_node;
    new_node = (struct list*)malloc(sizeof(struct list));
    printf("Enter the data to be inserted!");
    scanf("%d",&val);

    for(ptr=head;ptr->link;ptr=ptr->link)
    {
        if(ptr->link->data == 3)
        {
          printf("Found");
          new_node->data = val;
          new_node->link = ptr->link;
          ptr->link = new_node;
        }
    }
}

Здесь:

if(ptr->link->data == 3)

вы просто смотрите вперед, чтобы проверить, имеет ли следующий узел значение, которое вам нужно.

1 голос
/ 04 сентября 2011

Давайте назовем curr указатель на текущий элемент, next указатель на следующий элемент и value сохраненное число.

Просматривайте список до curr.value == 2, теперь просто создайте new_node с new_node.value = 7 и установите new_node.next = curr.next и curr.next = new_node

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...