开发者

inserting an element in a linked list

Considering a linked list containing five elements. 1,2,3,4,5 a no '7' is to be inserted after two. we will have an head pointing to the first element of the linked list and ptr at the last. while inserting an element before 3 we will loop through the linked list starting from head to last and we will introduce another pointer(prev) to hold the previous pointers address.ptr will point to the current node and if a matching data is found(3) then we have to include the new node between 2 and 3. We can do it as we have previous pointer.How to do it without using a previous pointer.

EDITED:

#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));
    ne开发者_StackOverflow中文版wNode->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");
}


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;
        }
    }
}

Update: This is probably what you want:

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;
        }
    }
}

Here:

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

you simply look ahead to check if next node has value that you need.


Let's call curr the pointer at the current element, next the pointer at the next element, and value the number stored.

Traverse the list until curr.value == 2, now just create a new_node with new_node.value = 7 and set new_node.next = curr.next and curr.next = new_node

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜