反转链表,取得链表中间值,增加节点操作

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

node* reverse_list(node *head)
{
    if (head == NULL || head->next == NULL)
    {
        return head;
    }
    node *temp = head;
    node *temp2 = head->next;
    node *temp3 = NULL;
    while(temp != NULL && temp2 != NULL)
    {
        temp3 = temp2->next;
        temp2->next = temp;
        temp = temp2;
        temp2 = temp3;
    }
    head->next = NULL;
    return temp;
}
int addNode(node *head, int n)
{
    if (head == NULL)
    {
        return -1;
    }
    node *temp = new node;
    temp->data = n;
    temp->next = NULL;
    if (temp != NULL)
    {
        while(head->next != NULL)
            head = head->next;
        head->next = temp;
        return 0;
    }
    return -1;
}

int getMidNode(node *head)
{
    if (head == NULL)
    {
        return 0;
    }
    node *temp = head;
    node *temp_next = head->next;
    while(temp_next != NULL)
    {
        temp_next = temp_next->next;
        if (temp_next == NULL)
        {
            return temp->data;
        }
        temp_next = temp_next->next;
        temp = temp->next;
    }
    return temp->data;
}


int _tmain(int argc, _TCHAR* argv[])
{
    node *head = new node;
    head->data = 1;
    head->next = NULL;
    for (int i = 2; i < 8; i++)
    {
        addNode(head, i);
    }
    for (node *temp = head; temp != NULL; temp = temp->next)
    {
        printf("%d ", temp->data);
    }
    head = reverse_list(head);
    for (node *temp = head; temp != NULL; temp = temp->next)
    {
        printf("%d ", temp->data);
    }
    printf("/n");
    printf("mid data: %d/n", getMidNode(head));

    getchar();
    return 0;
}

你可能感兴趣的:(反转链表,取得链表中间值,增加节点操作)