Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
263 views
in Technique[技术] by (71.8m points)

singly linked list - Can't insert the element in the required position

I want to enter the number at a particular position but my code is not putting the element in the required position, it seems right to me because I manually doing it in the Paper but in the system, I can't get the element in that position. It insert an element at the end of the list rather than specific position.

My Code

#include<stdio.h>
#include<stdlib.h>

struct Node
{
    int data;
    struct Node* next;
};

void beginning(struct Node** head_ref, int data)
{
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = *head_ref;
    *head_ref = newNode;    
}

int lenght(struct Node* head_ref)
{
    int count = 0;
    struct Node* current = head_ref;
    while(current != NULL)
    {
        count++;
        current = current->next;
    }
    return count;
}

void middle(struct Node* head_ref, int data, int position)
{
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    int size = lenght(head_ref);
    if(size > position)
    {
        for(int i = 0; i < size-1; i++)
        {
            head_ref = (head_ref->next);
        }
        newNode->next = head_ref->next;
        head_ref->next = newNode;
    }
    
}


void end(struct Node** head_ref, int data)
{
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    struct Node* last = *head_ref;
    newNode->data = data;
    newNode->next = NULL;
    if(*head_ref==NULL)
    {
        *head_ref = newNode;
        return;
    }
    while(last->next != NULL)
    {
        last = last->next;
    }
    last->next = newNode;
}


void printlist(struct Node* head_ref)
{
    int i;
    while(head_ref != NULL)
    {
        printf("%d ", head_ref->data);
        head_ref = head_ref->next;
    }
}


int main()
{
    
    struct Node* head = NULL;
    int choices, element, index;
    char insertionChoices;
    while(1)
    {
        printf("
Enter your choices:
 1.Enter an element in the beginning
 2.Enter the element in the middle
 "
                "3.Enter the element at the end
4. Traverse
5. Exit
");
        scanf("%d", &choices);
        switch(choices)
        {
            case 1:
                printf("Enter an element: ");
                scanf("%d", &element);
                beginning(&head, element);
                break;
                
            case 2:
                printf("Enter an index and elemetn: ");
                scanf("%d %d", &index, &element);
                middle(head, element, index-1);
                break;
            
            case 3:
                printf("Enter an element: ");
                scanf("%d", &element);
                end(&head, element);
                break;
    
            case 4: 
                printlist(head);
                break;
                
                
            case 5:
                exit(0);
            
            default:printf("Wrong input");
        }
    }
    
    
    return 0;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...