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

面试题26

2016-05-24 16:19 375 查看
反转链表:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点

#include<stdio.h>
#include<assert.h>

typedef struct node {
int data;
struct node *next;
}Lnode;

Lnode* InitList(int *A, int len) {
assert(A&&len);
Lnode *L=NULL ,*p=NULL;
for (int i = 0; i < len; i++) {
Lnode *tmp = (Lnode*)malloc(sizeof(Lnode));
tmp->data = A[i];
if (i == 0)
L = p = tmp;
else {
p->next = tmp;
p = p->next;
}
}
p->next = NULL;
return L;
}

Lnode* ReverseList(Lnode *L) {
Lnode *Lpre = NULL;
Lnode *LRvsHead = NULL;
Lnode *p = L;
while (p!= NULL) {
Lnode *pnext = p->next;
if (pnext == NULL) {
LRvsHead=p;
}
p->next = Lpre;  //p的下一个结点是Lpre
Lpre = p;
p = pnext;
}
return LRvsHead;
}

int main() {
int A[] = { 1,2,3,4,5 };
int len = sizeof(A) / sizeof(A[0]);
Lnode *LinkA=InitList(A, len);  //构建一个链表
Lnode *RvsHead = ReverseList(LinkA);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: