打印链表
</pre><pre name="code" class="cpp">void print(node *head)
{
node *p;
p = head;
while(p!=NULL)
{
printf("%d\n", p->data);
p = p->next;
}
}
单链表删除链表节点
node *del(node *head, int num)
{
node *p1, *p2;
p1 = head;
while (num != p1->data&&p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if (num == p1->data)
{
if (p1 == head)
{
head = p1->next;
free(p1);
}
else
{
p2->next = p1->next;
}
}
else
printf("cannot find %d numbers\n", num);
return head;
}
单链表的插入
node *insert(node *head, int num)
{
node *p0, *p1, *p2;
p1 = head;
p0 = (node*)malloc(sizeof(node));
p0->data = num;
while (p0->data > p1->data&&p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if (p0->data <= p1->data)
{
if (p1 == head)
{
p0->next = p1;
head = p0;
}
else
{
p2->next = p0;
p0->next = p1;
}
}
else
{
p1->next = p0;
p0-> next = NULL;
}
return head;
}
单链表反转
node *inverse(node *head)
{
node *p1, *p2, *p3;
if (head == NULL || head->next == NULL)
return head;
p1 = head;
p2 = p1->next;
while (p2)
{
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
head->next = NULL;
head = p1;
return head;
}
两个有序链表连接
node *add(node *head1, node *head2)
{
node *p1, *p2, *head3;
if (head1 == NULL)
return head2;
if (head2 == NULL)
return head1;
p1 = head1;
p2 = head2;
head3 = NULL;
if (p1->data <= p2->data)
{
head3 = p1;
head3->next = add(p1->next, p2);
}
else if(p1->data > p2->data)
{
head3 = p2;
head3->next = add(p1, p2->next);
}
return head3;
}
链表排序
node *sort(node *head)
{
node *p;
int temp, n;
n = length(head);
p = head;
if (head == NULL || head->next == NULL)
return head;
for (int i = 0; i < n - 1; ++i)
{
p = head;
for (int j = 0; j < n - 1 - j; ++j)
{
if (p->data > p->next->data)
{
temp = p->data;
p->data = p->next->data;
p->next->data = temp;
}
}
p = p->next;
}
return head;
}