C语言如何截取部分链表?

作者站长头像
站长
· 阅读数 11

C语言如何截取链表呢,假设我现在有一段链表 1,2,3,4,5,6我怎么才能截取到它的中间部分2,3,4,5呢?

回复
1个回答
avatar
test
2024-07-01
#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node* next;
} Node;

Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if(newNode == NULL) {
        printf("Error creating a new node.\n");
        exit(0);
    }
    newNode->data = data;
    newNode->next = NULL;

    return newNode;
}

Node* sliceLinkedList(Node* head, int start, int end) {
    Node* current = head;
    Node* startNode = NULL;
    Node* endNode = NULL;

    // 找到开始和结束节点
    while(current != NULL) {
        if(current->data == start) {
            startNode = current;
        }
        if(current->data == end) {
            endNode = current;
            break;
        }
        current = current->next;
    }

    if(startNode != NULL && endNode != NULL) {
        endNode->next = NULL;
        return startNode;
    }

    return NULL;
}

int main() {
    Node* head = createNode(1);
    head->next = createNode(2);
    head->next->next = createNode(3);
    head->next->next->next = createNode(4);
    head->next->next->next->next = createNode(5);
    head->next->next->next->next->next = createNode(6);

    Node* sliced = sliceLinkedList(head, 2, 5);

    Node* current = sliced;
    while(current != NULL) {
        printf("%d ", current->data);
        current = current->next;
    }

    return 0;
}
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容