示例代碼注重這裡p1的作用
以下代碼是用尾插法添加結點
#include <stdio.h>
#include <stblib.h>
#define N sizeof
(STU)
typedef struct stu
{
int
num;
char name[20];
} STU, * PSTU;
PSTU creat (PSTU
head)
//尾插法添加結點
PSTU head, p1, p2;
head = p1 = (PSTU) malloc (N);
//p1的作用相當于将之後生成的結點連結到一起
p2 =
(PSTU) malloc (N);
printf ("Please input the num(0 to
quit), name:\n");
scanf ("%d %s", &p2->num,
p2->name);
while (p2->num != 0)
{
p1->next =
p2;
p1 = p2;
p2 = (PSTU) malloc (N);
printf ("Please input the num(0 to quit),
name:\n");
scanf ("%d %s",
&p2->num, p2->name);
}
p1->next = NULL;
free (p2);
return head;
}
第二個代碼是合并2個升序連結清單#include <stdio.h>
#include
<stdlib.h>
#define N sizeof (DATA)
typedef struct
data
int data1;
struct data *
next;
} DATA, * PDATA;
PDATA creat (void);
void print (PDATA
head);
int count (PDATA head);
PDATA combine (PDATA head1, PDATA
head2);
int main (void)
PDATA head1, head2,
head3;
int n1, n2;
puts
("請輸入第一個數列");
head1 = creat ();
n1 =
count (head1);
puts ("請輸入第二個數列");
head2 = creat ();
n2 = count
(head2);
puts ("兩個數列和到一起:");
head3 =
combine (head1, head2);
print (head3);
return 0;
PDATA creat (void)
PDATA
head, p1, p2;
head = p1 = (PDATA) malloc
(N);
p2 = (PDATA) malloc (N);
printf
("請輸入一個升序序列(0退出)");
scanf ("%d",
&p2->data1);
while (p2->data1 !=
0)
{
p1->next
= p2;
p2 = (PDATA) malloc (N);
scanf ("%d", &p2->data1);
}
p1->next = NULL;
free
(p2);
return head;
head)
PDATA p = head;
p =
p->next;
while (p)
printf ("%4d",
p->data1);
p =
("\n");
int count (PDATA head)
int n =
0;
n++;
p = p->next;
return n;
//這裡注重pc的作用
head2)
PDATA pa = head1;
pb = head2;
PDATA pc = head1;
pa =
pa->next;
pb = pb->next;
while
(pa && pb)
if (pa->data1 < pb->data1)
pc->next
= pa;
pc =
pa;
pa =
}
else
= pb;
pb;
pb =
pb->next;
pc->next = pa ? pa : pb;
return head1;