头插法
思路:每次插入都在第一个节点之前,头结点之后,那每次插入时的赋值就只要将头结点的地址赋给插入的节点,然后将插入的节点的地址依次给后面节点就可以了。
1、定义一个要插入的节点q
2、q->data内给值e
3、q->next = p->next;建立后续节点。
4、p->next = q;建立前驱节点。
int FirstInsert(Node *l, ElemType e) { Node *p = l; if(NULL == l) //入参判断 { return FAILURE; } if(NULL == p) { return FAILURE; } Node *q = (Node *) malloc (sizeof(Node) * 1); if(NULL == q) { return FAILURE; } q->data = e; if(p->next != NULL) { q->next = p->next; } p->next = q; return SUCCESS; }
尾插法
思路:尾插法,即每次插入都插入到链表的尾节点之后,那么这样就很简单了,只要把最后一个节点的指针域赋值要插入的节点的地址,要插入节点的指针域为NULL就行了。
1、定义一个节点q,q->data = e; 给要插入的节点给值e
2、p->next = q;连接前驱节点
3、q->next = NULL;无后续节点,赋值为空。
int FinalInsert(Node *l, ElemType e) { Node *p = l; if(NULL == l) { return FAILURE; } while(p->next != NULL) { p = p->next; } if(NULL == p) { return FAILURE; } Node *q = (Node *) malloc (sizeof(Node) * 1); if(NULL == q) { return FAILURE; } q->data = e; q->next = NULL; p->next = q; return SUCCESS; }