现在已有节点 1,2,3,4,5; 1->2->3->4->5
需要在1的前面插入100; 100->1->2->3->4->5
需要在3的前面插入103; 100->1->2->103->3->4->5
需要在5的前面插入105; 100->1->2->103->3->4->105->5
具体代码如下
#include <stdio.h>
struct Test
{
int data;
struct Test *next;
};
// 遍历链表输出
void printLink(struct Test *head)
{
struct Test *p = head;
while(p != NULL){
printf("%d ",p->data);
p = p->next;
}
}
// 通过返回链表头的方式是实现
struct Test *insertFromfor(struct Test *head, int data, struct Test *new)
{
struct Test *p = head;
// 第一种情况,直接在头节点前面插入
if(p->data == data){
new->next = head;
head = new;
return head;
}
// 第二种情况,在中间节点前面插入
while(p->next != NULL){
if(p->next->data == data){
new->next = p->next;
p->next = new;
printf("insert ok\n");
return head;
}
p = p->next;
}
printf("no this data%d\n",data);
return head;
}
int main()
{
struct Test *head = NULL;
struct Test t1 = {1, NULL};
struct Test t2 = {2, NULL};
struct Test t3 = {3, NULL};
struct Test t4 = {4, NULL};
struct Test t5 = {5, NULL};
t1.next = &t2;
t2.next = &t3;
t3.next = &t4;
t4.next = &t5;
head = &t1;
struct Test new2 = {101, NULL};
head = insertFromfor(head, 1, &new2);
struct Test new3 = {103, NULL};
head = insertFromfor(head, 3, &new3);
struct Test new4 = {105, NULL};
head = insertFromfor(head, 5, &new3);
puts("after insert head");
printLink(head);
putchar('\n');
}