零、声明
typedef int DataType;
typedef struct ListNode
{
DataType data;
struct ListNode* next;
}ListNode;
一、从尾到头打印单链表
利用递归的思想,在遇到尾节点之前不返回。
void PrintTailFront(ListNode *list)
{
if (list == NULL)
{
return;
}
PrintTailFront(list->next);
printf("%d ", list->data);
}
二、删除一个无头单链表的非尾节点
不知道头结点的话,就无法知道需要删除的节点的前一个节点。但是我们知道删除节点的下一个节点,通过将后一个节点的值赋给当前节点的方式,可以实现删除的效果。
void DeleteNoneHeadPos(ListNode *pos)
{
ListNode *Next == NULL;
if (pos == NULL)
{
printf("Can not find the position\n");
return;
}
Next = pos->next;
pos->data = Next->data;
pos->next = Next->next;
free(Next);
}
三、在无头单链表的一个节点前插入一个节点
跟上一个一样,不知道前一个节点的位置。所以就生成一个新节点,将节点链接到当前节点的后面,再交换两者的值。
void InsertNoneHead(ListNode *pos, DataType x)
{
ListNode *New = BuyList(x);
DataType tmp = 0;
if (pos == NULL)
{
printf("Can not find the position\n");
return;
}
tmp = New->data;
New->data = pos->data;
pos->data = tmp;
New->next = pos->next;
pos->next =