单链表的基本操作
1.头插法创建链表,输入0时结束
2.对链表h进行遍历、翻转
要求运行结果如图
#include
typedef struct node{
int value;
struct node *next;
} *LinkList, Node;
LinkList head=NULL;
void traverse(LinkList h);
LinkList reverse(LinkList h);
int main()
{
int data;
LinkList e;
/* 采用头插法创建链表,当输入0时,创建结束 */
while(1){
// task 1: your code goes here
}
traverse(head);
traverse(reverse(head));
system("pause");
return 0;
}
/*
* 对链表h进行遍历
*/
void traverse(LinkList h)
{
// task 2: your code goes here
}
/*
* 对链表h进行翻转
*/
LinkList reverse(LinkList h)
{
// task 3: your code goes here
}
```c++
```
你可以参考一下,我博客中的单链表操作
补充如下,供参考:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int value;
struct node* next;
} *LinkList, Node;
LinkList head = NULL;
void traverse(LinkList h);
LinkList reverse(LinkList h);
int main()
{
int data;
LinkList e;
/* 采用头插法创建链表,当输入0时,创建结束 */
while (1) {
// task 1: your code goes here
scanf("%d", &data);
if (data == 0) break;
e = (LinkList)malloc(sizeof(Node));
e->next = NULL;
e->value = data;
e->next = head;
head = e;
}
traverse(head);
traverse(reverse(head));
system("pause");
return 0;
}
/*
* 对链表h进行遍历
*/
void traverse(LinkList h)
{
// task 2: your code goes here
LinkList p = h;
while (p) {
printf(p == h ? "%d" : " %d", p->value);
p = p->next;
}
printf("\n");
}
/*
* 对链表h进行翻转
*/
LinkList reverse(LinkList h)
{
// task 3: your code goes here
LinkList p = h, q = NULL;
h = NULL;
while (p) {
q = p;
p = p->next;
q->next = h;
h = q;
}
return h;
}
#include <stdlib.h>
#include <stdio.h>
// 节点
typedef struct node {
int value;
struct node *next;
} *LinkList, Node;
// 链表头
LinkList head = NULL;
// 遍历链表
void traverse(LinkList h);
// 对链表进行反转
LinkList reverse(LinkList h);
int main() {
int data;
LinkList e;
/* 采用头插法创建链表,当输入0时,创建结束 */
while (1) {
// task 1: your code goes here
// Input number
scanf("%d", &data);
if (data == 0) {
break;
} else {
// Creat next node
e = (LinkList)malloc(sizeof(node));
e->value = data;
e->next = head;
head = e;
}
}
traverse(head);
traverse(reverse(head));
system("pause");
return 0;
}
/*
* 对链表h进行遍历
*/
void traverse(LinkList h) {
// task 2: your code goes here
while ( h != nullptr ) {
// If the next is null
printf("%d ", h->value);
h = h->next;
}
printf("\n");
}
/*
* 对链表h进行翻转
*/
LinkList reverse(LinkList h) {
// task 3: your code goes here
// Creat a new LinkList
LinkList newList = nullptr;
LinkList listLast;
// if h is not null
while (h != nullptr) {
//TODO
if (newList == nullptr) {
// if newList is null
// creat a new node in newList
newList = (LinkList)malloc(sizeof(node));
newList->next = nullptr;
newList->value = h->value;
} else {
// if newList is not null
// creat a new node in listLast
listLast = (LinkList)malloc(sizeof(node));
listLast->value = h->value;
// add the listLast in the newList's head
listLast->next = newList;
newList = listLast;
}
// h next
h = h->next;
}
return newList;
}