您的位置:首页 > 职场人生

面试题整理-链表的几个微操

2012-10-17 08:59 447 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: