1.创建单向链表
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int x ; Node *next ;
} N ;
N* add(int n) ;
void pf(N *hd) ;
void up(N *hd) ;
main(void)
{
N *hd = NULL;
int n ;
printf("输入你想要创建节点的数量:\n") ;
scanf("%d", &n) ;
printf("输入%d个节点数据:\n", n) ;
hd = add(n) ;
pf(hd) ;
up(hd) ;
}
N* add(int n)
{
N *first, *p, *last ;
first = (N *)malloc(sizeof(N)) ;
scanf("%d", &first->x) ;
last = first ;
for (int i = 2 ; i <= n ; i++)
{
p = (N *)malloc(sizeof(N)) ;
scanf("%d", &p->x) ;
last->next = p ;
last = p ;
}
last->next = NULL ;
return first ;
}
void pf(N *hd)
{
N *p = hd ;
while (p != NULL)
{
printf("%d ", p->x) ;
p = p->next ;
}
}
void up(N *hd)
{
N *p = hd, *pr = NULL ;
while (p)
{
pr = p->next ;
free(p) ;
p = pr ;
}
}
2.链表和并
降序的话把链表和并函数大于号和小于号换一下就行了
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int x ;
Node *next ;
} N ;
N* add(int n) ;
void pf(N *hd) ;
void up(N *hd) ;
N* hb(N *a, N *b) ;
main(void)
{
N *a, *b ;
int n, m ;
printf("请输入你想要为链表a创建节点的数量:\n") ;
scanf("%d", &n) ;
printf("请输入%d个节点数据(按升序):\n", n) ;
a = add(n) ;
printf("请输入你想要为链表b创建节点的数量:\n") ;
scanf("%d", &m) ;
printf("请输入%d个节点数据(按升序):\n", m) ;
b = add(m) ;
a = hb(a, b) ;
pf(a) ;
up(a) ;
}
N* add(int n)
{
N *first, *p, *last ;
first = (N *)malloc(sizeof(N)) ;
scanf("%d", &first->x) ;
last = first ;
for (int i = 2 ; i <= n ; i++)
{
p = (N *)malloc(sizeof(N)) ;
scanf("%d", &p->x) ;
last->next = p ;
last = p ;
}
last->next = NULL ;
return first ;
}
void pf(N *hd)
{
N *p = hd ;
while (p != NULL)
{
printf("%d ", p->x) ;
p = p->next ;
}
}
N* hb(N *a, N *b)
{
N *first = NULL, *last = NULL ;
while (a && b)
{
if (a->x < b->x)
{
if (first == NULL)
{
first = a ;
last = a ;
}
else
{
last->next = a ;
last = a ;
}
a = a->next ;
}
else if (a->x > b->x)
{
if (first == NULL)
{
first = b ;
last = b ;
}
else
{
last->next = b ;
last = b ;
}
b = b->next ;
}
else
{
if (first == NULL)
{
first = a ;
last = a ;
}
else
{
last->next = a ;
last = a ;
}
a = a->next ;
last->next = b ;
last = b ;
b = b->next ;
}
}
if (a)
last->next = a ;
if (b)
last->next = b ;
return first ;
}
void up(N *hd)
{
N *p = hd, *pr = NULL ;
while (p)
{
pr = p->next ;
free(p) ;
p = pr ;
}
}