栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言,回文链表判断,单链表转双链表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言,回文链表判断,单链表转双链表


#include 
#include 

 struct DoubleListNode {
     int val;
     struct DoubleListNode *prev;
     struct DoubleListNode *next;
 };
 
 struct ListNode {
     int val;
     struct ListNode *next;
 };
 
 struct ListNode* init(int val){
     struct ListNode* head = malloc(sizeof(struct ListNode));
     head->next = NULL;
     head->val = val;
     return head;
 }
 
 void insert(struct ListNode* head, int val){
     struct ListNode* p = head;
     while(p->next){
         p = p->next;
     }
     
     struct ListNode* node = malloc(sizeof(struct ListNode));
     node->next = NULL;
     node->val = val;
     p->next = node;
     
 }
 
 struct DoubleListNode* initDouble(int val){
     struct DoubleListNode*head = malloc(sizeof(struct DoubleListNode));
     head->prev = NULL;
     head->next = NULL;
     head->val = val;
     return head;
 }
 
 void insertDouble(struct DoubleListNode* head, int val){
     if (head == NULL){
         head = malloc(sizeof(struct DoubleListNode));
         head->prev = NULL;
         head->next = NULL;
         head->val = val;
         return;
     }
     struct DoubleListNode* p = head;
     while(p->next){
         p = p->next;
     }
     struct DoubleListNode* doubleNode= malloc(sizeof(struct DoubleListNode));
     doubleNode->prev = p;
     doubleNode->next = NULL;
     doubleNode->val = val;
     p->next = doubleNode;
 }

void print(struct ListNode* head){
    struct ListNode* p = head;
    while(p){
        printf("%d ", p->val);
        p = p->next;
    }
}

void printDNode(struct DoubleListNode* head){
    struct DoubleListNode* p = head;
    while(p){
        printf("%d ", p->val);
        p = p->next;
    }
}

int main()
{
    struct ListNode* head = init(1);
    insert(head,2);
    insert(head,3);
    insert(head,3);
    insert(head,2);
    insert(head,1);
    print(head);
    printf("n");
    
    struct DoubleListNode* doubleHead = initDouble(head->val);
    
    struct ListNode* p = head;
    struct DoubleListNode* dp = doubleHead;
    while(p->next){
        p = p->next;
        insertDouble(dp,p->val);
    }

    printDNode(doubleHead);

    printf("n");
    struct DoubleListNode* dTail = doubleHead;
    while(dTail->next){
        dTail = dTail->next;
    }
    int ret = 0;
    while(dp){
        if (dp->val == dTail->val){
            dp = dp->next;
            dTail = dTail->prev;
            if (dp == dTail){
                ret = 1;
                break;
            }
        }else{
            break;
        }
    }
    
    printf("%dn",ret);
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330510.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号