Upload files to "DS/C/Lab/Week7"
This commit is contained in:
parent
7a2498b4ff
commit
75507b7abc
4 changed files with 336 additions and 0 deletions
82
DS/C/Lab/Week7/XYZLL.c
Normal file
82
DS/C/Lab/Week7/XYZLL.c
Normal file
|
@ -0,0 +1,82 @@
|
|||
// Let X = (x1, x2….xn) and Y = (y1, y2….yn) be 2 linked lists. Assume that, in each list,
|
||||
// the nodes are in non-decreasing order of the data field values. Write an algorithm to
|
||||
// merge two lists to obtain a new linked list Z in which the nodes are also in the non-
|
||||
// decreasing order. Following the merge, X and Y do not exist as individual lists. Each
|
||||
// node initially in X or Y is now in Z. Do not use additional nodes.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct node *nodePtr;
|
||||
struct node {
|
||||
int data;
|
||||
nodePtr link;
|
||||
};
|
||||
|
||||
nodePtr merge(nodePtr x, nodePtr y)
|
||||
{
|
||||
nodePtr z, temp;
|
||||
if (!x) return y;
|
||||
if (!y) return x;
|
||||
if (x->data <= y->data) {
|
||||
z = x;
|
||||
x = x->link;
|
||||
} else {
|
||||
z = y;
|
||||
y = y->link;
|
||||
}
|
||||
temp = z;
|
||||
while (x && y) {
|
||||
if (x->data <= y->data) {
|
||||
temp->link = x;
|
||||
x = x->link;
|
||||
} else {
|
||||
temp->link = y;
|
||||
y = y->link;
|
||||
}
|
||||
temp = temp->link;
|
||||
}
|
||||
if (x) temp->link = x;
|
||||
if (y) temp->link = y;
|
||||
return z;
|
||||
}
|
||||
|
||||
void printList(nodePtr head)
|
||||
{
|
||||
while (head) {
|
||||
printf("%d ", head->data);
|
||||
head = head->link;
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
nodePtr createNode(int data)
|
||||
{
|
||||
nodePtr newNode = (nodePtr)malloc(sizeof(struct node));
|
||||
newNode->data = data;
|
||||
newNode->link = NULL;
|
||||
return newNode;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
nodePtr x = createNode(1);
|
||||
x->link = createNode(3);
|
||||
x->link->link = createNode(5);
|
||||
|
||||
nodePtr y = createNode(2);
|
||||
y->link = createNode(4);
|
||||
y->link->link = createNode(6);
|
||||
|
||||
printf("List X: ");
|
||||
printList(x);
|
||||
printf("List Y: ");
|
||||
printList(y);
|
||||
|
||||
nodePtr z = merge(x, y);
|
||||
|
||||
printf("Merged list Z: ");
|
||||
printList(z);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue