链表的创建及逆序打印
1.链表的创建,以下:
void AddToTail(Link ** head,int value)
{
Link * p = new Link();
Link * ahead = *head;
p->value = value;
p->next = NULL;
if(*head == NULL)
*head = ahead = p;
else
{
while(ahead->next)
{
ahead=ahead->next;
}
ahead->next = p;
}
}
以上只是创建单个节点并把节点插入链表尾部,若要创建完整链表还需循环输入
2.链表节点的删除(删除筛选第一个)
void RemoveNode(Link ** head,int value)
{
if(*head == NULL || head == NULL)
return;
Link * index = *head;
Link * index_2=(*head)->next;
if(index->value == value)
{
*head=index_2;
delete(index);
}
else
{
while(index_2->value!=value)
{
index=index->next;
index_2=index_2->next;
if(index_2 == NULL)
break;
}
index->next=index_2->next;
delete(index_2);
}
}
因为使用 new 申请的空间,所以需要用 free 释放内存
3.链表的逆序输出
×使用栈
void ReversePrint_stack(Link ** head)
{
if(head == NULL || *head == NULL)
return ;
int stack[30];
int top=0;
Link * index=(*head);
while(1)
{
if(index == NULL)
break;
stack[top++] = index->value;
index = index->next;
}
--top;
while(top >= 0)
{
printf("%2d",stack[top]);
--top;
}
printf("\n");
}
×使用递归
void ReversePrint(Link * head)
{
if(head == NULL)
return;
ReversePrint(head->next);
printf("%2d",head->value);
}
茅檐低小,溪上青青草。
最喜小儿亡赖,溪头卧剥莲蓬。
一杯一杯复一杯。当归。。。
浙公网安备 33010602011771号