单链表的基本操作(代码补充)

单链表的基本操作

1.头插法创建链表,输入0时结束
2.对链表h进行遍历、翻转

要求运行结果如图

img

#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;
}