typedef struct _node
{
int data;
struct _node *next;
}node;
1 在链表未尾插入一个结点
node *push_back(node **head, int value) {
node *p = *head;
if (NULL == head) return NULL;
if (NULL == *head) {
*head = apply();
(*head)->data = value;
return *head;
}
while (p->next) p = p->next;
p->next = apply();
p->next->data = value;
return *head;
}
要注意对于头指针的处理。
2、删除一个找到的值
node *remove_node(node **head, int value) {
node *p = *head, *front = NULL;
if (NULL == p || NULL == head) return NULL;
while (p && p->data != value) {
front = p;
p = p->next;
}
if (!p) return *head;
if (front) front = p->next;
else *head = p->next;
free(p);
return *head;
}
3 逆序输出链表
typedef struct _xnode {
node *data;
node *next;
}xnode;
void push(xnode **stack, node *p) {
xnode *t = NULL;
if (!stack) return;
t = (xnode *) malloc(sizeof(xnode));
if (!*stack) {
(*stack) = t;
(*stack)->data = p;
(*stack)->next = NULL;
} else {
t->data = p;
t->next = *stack;
(*stack) = t;
}
}
node *pop(xnode **stack) {
xnode *t = NULL;
node *p = NULL;
if (!stack || !(*stack)) return NULL;
t = (*stack)->next;
p = (*stack)->data;
free(*stack);
*stack = t;
return p;
}
void rprint(node *head) {
xnode *stack = NULL;
node *p = head;
while (p) {
push(&stack, p);
p = p->next;
}
while ((p = pop(&stack))) {
printf("->%d", p->data);
}
}