bol_in 2022-06-24 02:53 采纳率: 64.6%
浏览 43
已结题

LinkList 操作

LinkList 操作
本題須使用以下 Link List struct 實作
typedef struct node_s{
int data;
struct node_s *next;
} node_t;
針對空的 List,先進行 N個資料節點加入,再進行加入、刪除、交換、反轉等操作。輸出操作後 LinkList 資料。測試資料不會出現相同整數資料。

輸入說明
Line 1, 輸入 N,代表 N 個整數資料節點。
Line 2, 輸入 N 個整數,依序加入節點。
Line 3, 輸入整數 C,代表操作指令的數量。
Line 4~C+3, 輸入操作指令所須整數資料 x或 x, y。操作指令:

  1. 從最後面加入資料 x。
  2. 刪除最前面節點,若 List 無節點,則不必刪除。
  3. 刪除最後面節點,若 List 已無節點,則不必刪除。
  4. 刪除 List 內資料為 x 的節點;若 x 不存在則不刪除任何節點。
  5. 搜尋 List 內資料為 x 的節點,並在其後加入數值 y 的新節點。若 x 不在 List 中,則不必加入 y 。
  6. 反轉 Link List。
  7. 交換數值為 x和 y 節點的位置,若 x 或 y 不在 List中,則不必交換。
    輸出說明
    從最前面節點開始依序輸出各節點的值,每個數字中間以空白間隔; 若 List 為空,則輸出"None"

Sample Input 1:最後面加入節點
1
1
3
2
1 2
1 3
Sample Output 1:
2 3

Sample Input 2: 刪除最前面節點
1
3
2
2
2
Sample Output 2:
None

Sample Input 3: 刪除最後面節點
3
1 2 3
4
3
3
3
3
Sample Output 3:
None

Sample Input 4:刪除資料為 x的節點
5
1 2 3 4 5
4
4 1
4 5
4 3
4 6
Sample Output 4:
2 4

Sample Input 5:搜尋並插入新節點
5
1 2 3 4 5
4
5 1 7
5 5 8
5 3 9
5 6 10
Sample Output 5:
1 7 2 3 9 4 5 8

Sample Input 6: 反轉 Link List
5
1 2 3 4 5
3
6
6
6
Sample Output 6:
5 4 3 2 1

Sample Input 7: 交換節點
8
1 2 3 4 5 6 7 8
4
7 1 2
7 7 8
7 1 8
7 2 7
Sample Output 7:
7 8 3 4 5 6 1 2

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-06-24 12:42
    关注

    供参考:

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct node_s {
        int data;
        struct node_s* next;
    } node_t;
    void create_List(node_t** L,int n)// N個資料節點加入
    {
        int i;
        node_t* pt = NULL, * pL = NULL;
        (*L) = (node_t*)malloc(sizeof(node_t));
        (*L)->next = NULL;
        pL = (*L);
        for (i = 0; i < n; i++) {
            pt = (node_t*)malloc(sizeof(node_t));
            pt->next = NULL;
            scanf("%d", &pt->data);
            pL->next = pt;
            pL = pt;
        }
    }
    void insert_end(node_t* L, int x)//從最後面加入資料 x
    {
        node_t* pL = L, * pt = NULL;
        while (pL->next)  pL = pL->next;
        pt = (node_t*)malloc(sizeof(node_t));
        pt->next = NULL;
        pt->data = x;
        pL->next = pt;
    }
    void delete_first(node_t* L)//刪除最前面節點,若 List 無節點,則不必刪除
    {
        node_t* pL = NULL;
        if (!L->next)  return;
        pL = L->next;
        L->next = pL->next;
        free(pL);
    }
    void delete_end(node_t* L)//刪除最後面節點,若 List 已無節點,則不必刪除
    {
        node_t* pL = L, * pre = NULL;
        if (!L->next)  return;
        while (pL->next) { pre = pL; pL = pL->next; }
        pre->next = pL->next;
        free(pL);
    }
    void deletd_x(node_t* L, int x)//刪除 List 內資料為 x 的節點;
    {                               //若 x 不存在則不刪除任何節點
        if (!L->next)  return;
        node_t* pL = L->next, * pre = L;
        while (pL) {
            if (pL->data == x) {
                pre->next = pL->next;
                free(pL);
                pL = pre;
            }
            else {
                pre = pL;
                pL = pL->next;
            }
        }
    }
    void search_x_insert_y(node_t* L, int  x, int  y)//搜尋 List 內資料為 x 的節點,並在其後加入
    {                                              //數值 y 的新節點。若 x 不在 List 中,則不必加入y
        if (!L->next)  return;
        node_t* pL = L->next, * pt = NULL;
        while (pL && pL->data != x) pL = pL->next;
        if (pL != NULL) {
            pt = (node_t*)malloc(sizeof(node_t));
            pt->next = NULL;
            pt->data = y;
            pt->next = pL->next;
            pL->next = pt;
        }
    }
    void convert_List(node_t* L) //反轉 Link List
    {
        if (!L->next)  return;
        node_t* pL = L->next, * pt = NULL;
        L->next = NULL;
        while (pL) {
            pt = pL;
            pL = pL->next;
            pt->next = L->next;
            L->next = pt;
        }
    }
    void swap_x_y(node_t* L, int x, int y)//交換數值為 x和 y 節點的位置,
                                           //若 x 或 y 不在 List中,則不必交換
    {
        if (!L->next)  return;
        node_t* pL = L->next, * prL = L, 
              * px = NULL, * py = NULL,
              * prx = NULL, *pry = NULL;
        while (pL) {
            if (pL->data == x) {
                prx = prL;
                px = pL;
            }
            else if (pL->data == y) {
                pry = prL;
                py = pL;
            }
            if (px && py)  break;
            prL = pL;
            pL = pL->next;
        }
        if (px && py) {
            if (pry == px) {
                prx->next = px->next;
                px->next = py->next;
                py->next = px;
            }
            else {
                prL = py->next;
                py->next = px->next;
                px->next = prL;
                prx->next = py;
                pry->next = px;
            }
        }
    }
    void print_List(node_t* L)//從最前面節點開始依序輸出各節點的值,每個數字
    {                          //以中間空白間隔,若 List 為空,則輸出"None" 
        node_t* pL = L;
        if (L == NULL || L->next == NULL)
            printf("None");
        else {
            while (pL->next) {
                printf(pL->next == L->next ? "%d" : " %d", pL->next->data);
                pL = pL->next;
            }
            //printf("\n");
        }
    }
    int main()
    {
        int N, C, s, x, y;
        node_t* List = NULL;
        scanf("%d", &N);
        create_List(&List, N);
        scanf("%d", &C);
        while (C--) {
            scanf("%d", &s);
            switch (s)
            {
            case 1:scanf("%d", &x); insert_end(List, x); break;
            case 2:delete_first(List); break;
            case 3:delete_end(List); break;
            case 4:scanf("%d", &x); deletd_x(List, x); break;
            case 5:scanf("%d%d", &x, &y); search_x_insert_y(List, x, y); break;
            case 6:convert_List(List); break;
            case 7:scanf("%d%d", &x, &y); swap_x_y(List, x, y); break;
            default:
                break;
            }
        }
        print_List(List);
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月20日
  • 已采纳回答 9月12日
  • 创建了问题 6月24日

悬赏问题

  • ¥15 angular开发过程中,想要读取模型文件,即图1的335行,会报404错误(如图2)。但我的springboot里配置了静态资源文件,如图3。且在该地址下我有模型文件如图4,请问该问题该如何解决呢?
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?
  • ¥15 讲解电路图,付费求解
  • ¥15 有偿请教计算电磁学的问题涉及到空间中时域UTD和FDTD算法结合的
  • ¥15 vite打包后,页面出现h.createElement is not a function,但本地运行正常
  • ¥15 Java,消息推送配置
  • ¥15 Java计划序号重编制功能,此功能会对所有序号重新排序,排序后不改变前后置关系。
  • ¥15 关于哈夫曼树应用得到一些问题