Doubly Linked List
Doubly Linked List
h>
2 #include<stdlib.h>
3
4 struct Node
5 {
6 int Item;
7 Node *PLink;
8 Node *NLink;
9 };
10
11 void AddNode (Node **Head, int Val)
12 {
13 Node *Q = *Head, *temp;
14
15 if (*Head == NULL)
16 {
17 *Head = (Node *) malloc(sizeof(Node));
18 (*Head)->Item = Val;
19 (*Head)->PLink = NULL;
20 (*Head)->NLink = NULL;
21 }
22 else
23 {
24 while ( Q->NLink != NULL )
25 Q = Q->NLink;
26 temp = (Node *) malloc(sizeof(Node));
27 temp->Item = Val;
28 temp->PLink = Q;
29 temp->NLink = NULL;
30 Q->NLink = temp;
31 }
32 }
33
34 void Display(Node *Head)
35 {
36 printf("\nElements : ");
37 while(Head != NULL)
38 {
39 printf(" %d", Head->Item);
40 Head = Head->NLink;
41 }
42 }
43
44 int DeleteLastNode(Node **Head)
45 {
46 Node *Q = *Head;
47 int Val = -1;
48 if (*Head == NULL)
49 {
50 printf("\nList is Empty.... ");
51 }
52 else if ((*Head)->NLink == NULL)
53 {
54 printf("\nList has Single Node....It is
Successfully Removed ");
55 Val = (*Head)->Item;
56 *Head = NULL;
57 }
58 else
59 {
60 while ( Q->NLink->NLink != NULL)
61 Q = Q->NLink;
62 Val = Q->NLink->Item;
63 Q->NLink->PLink = NULL;
64 Q->NLink = NULL;
65 }
66 return Val;
67 }
68
69 void AddBegnning(Node **Head, int Val)
70 {
71 Node *temp;
72 if (*Head == NULL)
73 {
74 *Head = (Node *) malloc(sizeof(Node));
75 (*Head)->Item = Val;
76 (*Head)->PLink = NULL;
77 (*Head)->NLink = NULL;
78 }
79 else
80 {
81 temp = (Node *) malloc(sizeof(Node));
82 temp->Item = Val;
83 temp->PLink = NULL;
84 temp->NLink = *Head;
85 (*Head)->PLink = temp;
86 *Head = temp;
87 }
88 }
89 int main()
90 {
91 Node *DLList = NULL;
92 AddNode(&DLList, 10);
93 AddNode(&DLList, 20);
94 AddNode(&DLList, 30);
95 Display(DLList);
96 AddNode(&DLList, 40);
97 AddNode(&DLList, 50);
98 Display(DLList);
99 printf("\nDeleted Item = %d
",DeleteLastNode(&DLList) );
100 printf("\nDeleted Item = %d
",DeleteLastNode(&DLList) );
101 Display(DLList);
102 AddBegnning(&DLList, 100);
103 AddBegnning(&DLList, 200);
104 Display(DLList);
105
106 }
107