# creating linked list, problem understanding code

I am trying to write comments to understand a program to implement inserting a node at nth position

I am not able to understand the last line in insert function

temp2->next = temp1; //??temp 1 that points to new node will be assigned to new node pointer

So far pointer to nth node (as in previous for loop temp 2 will be pointing to nth node) will be assigned to pointer in the newly created node. So new node is now pointing to the previously nth node.

But I don't understand how in the next line previous n-1 node will point to new node

Also I find it hard to keep in mind if I am dealing with the pointer before the node or the pointer part of next node.

Any helpful tips and suggestions will be appreciated

#include "stdio.h"
#include "stdlib.h"

struct Node

{
int data;

struct Node* next;
};

// define function to insert data  at poisition n

void Insert(int data, int n)

{
struct Node* temp1 = malloc(sizeof( struct Node())); // Dynamic memory      allocation using pointer called temp1

(*temp1).data=data;
(*temp1).next = NULL;

if (n == 1)   // if we enter in the 1st position

{

(*temp1).next = head; // temp1 is a pointer to malloced memory of a node whose pointer part will now take on same value as head
// ie pointing to first node

head = temp1;      // head pointer now becomes equal to temp1 pointer (that points to originally malloced node that thas become first node now)
return;

}

for (int i = 0; i < n-2; i++)

{
temp2 = temp2->next;        // first step,temp 2 will take on the pointer value of first node, ie point to second node
//will take temp 2 pointer to pointing nth node

}

temp1->next = temp2->next;   // pointer to nth node (as in previous     loop temp 2 will be pointing to nth node) will be assigned to pointer in the newly created node

temp2->next = temp1;        //??temp 1 that points to new node will be assigned to new node pointer

}
void Print()
{
while (temp != NULL)
{
printf("%d", temp->data);
temp = temp->next;

}printf("\n");

}
int main()
{
printf("program begins..\n");
Insert(2,1);
Insert(5, 2);
Insert(3, 3);

Print();
}


temp1->next = temp2->next;

temp2->next = temp1;