链表倒序算法

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

Node* createList(){
    Node *head;
    Node *PerNode;
    Node *CurNode;

    head = new Node;
    head->data = 0;
    PerNode = head;
    CurNode = NULL;
    for (int i = 1; i < 10; i++)
    {
        CurNode = new Node();
        CurNode->data = i;
        PerNode->next = CurNode;
        PerNode = CurNode;
    }

    return head;
}

Node* Order(Node *perNode, Node *curNode){
    Node *head;

    if (curNode->next != NULL){
        perNode = curNode;
        curNode = curNode->next;
        head = Order(perNode, curNode);
        curNode->next = perNode;
        return head;
    }
    else{
        curNode->next = perNode;
        return curNode;
    }
}

Node* reverse(Node *head){
    Node *newHead;

    if (head->next != NULL)
    {
        newHead = Order(head, head->next);
        head->next->next = head;
        head->next = NULL;
        return newHead;
    }
    else{
        return head;
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
    Node *head;

    head = createList();
    head = reverse(head);

    for (Node *curNode = head; curNode != NULL; curNode = curNode->next)
    {
        printf("%d",curNode->data);
    }

    printf("/n");

    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 答:(1)根据输入次序建立单链表,输出链表的值:按照输入的数字建立单链表,输出链表的值;(2)对链表按值从小到大排序,输出链表的值:对链表进行排序,按照从小到大的顺序输出;(3)删除值相同的结点,输出链表的值:删除链表中值相同的结点,输出剩余结点的值;(4)将链表倒序,输出:将链表中结点的顺序反转,输出倒序后的链表结点值。 ### 回答2: 输入n,再输入n个(0-100)之间的正整数: (1)按输入次序建立单链表,并输出链表的值; 输入n和n个正整数。首先创建一个头节点head,并让一个指针p指向head。然后,根据输入的正整数创建节点,并将节点链接到链表中。循环n次完成链表的创建。最后,遍历链表输出节点的值。 (2)对链表按值从小到大排序,并输出链表的值 创建一个新的指针new_head指向head,然后遍历链表中的节点,按节点的值的大小依次排序。如果节点i的值大于节点i+1的值,则交换节点i和节点i+1的位置,直到链表中的所有节点都排好序。最后,遍历链表输出节点的值。 (3)删除值相同的结点,输出链表的值 遍历链表中的节点,如果节点i的值与节点i+1的值相同,则删除节点i+1,并将节点i的next指针指向节点i+2。直到遍历完整个链表,所有相同值的节点都被删除。最后,遍历链表输出节点的值。 (4)将链表倒序,并输出 创建一个指向链表头节点的指针p,并将链表的连接关系依次反转。首先,将指针p指向当前节点,然后将当前节点的next指向上一个节点,再将上一个节点指针指向当前节点,最后将当前节点指针指向下一个节点。重复这个过程直到遍历完整个链表,完成链表倒序。最后,遍历链表输出节点的值。 ### 回答3: (1)按输入次序建立单链表,并输出链表的值: 首先创建一个空链表,然后按照输入的次序将n个(0-100)之间的正整数逐个插入链表的尾部。最后遍历整个链表,输出链表的值。 (2)对链表按值从小到大排序,并输出链表的值: 可以采用插入排序算法链表进行排序。从链表的第二个元素开始,依次将后面的元素插入到已排序的部分中的正确位置。最后遍历整个链表,输出排序后的链表的值。 (3)删除值相同的节点,输出链表的值: 遍历链表,利用一个集合(如哈希表)来记录已经出现的节点值。当遍历到一个节点时,如果该节点的值已经在集合中存在,则删除该节点,否则将该节点的值添加到集合中。最后遍历整个链表,输出删除重复值后的链表的值。 (4)将链表倒序,并输出: 可以采用三个指针的方法来实现链表倒序。首先将当前节点的后继节点保存到一个临时变量中,然后将当前节点的后继指针指向前一个节点,再将当前节点设为前一个节点,最后将临时变量设为当前节点。重复以上步骤直到链表的最后一个节点。最后遍历整个链表,输出倒序后的链表的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值