标题:设单链表中存放着n个字符,设计算法,判断该字符串中是否有中心对称关系
只看楼主
宸夜
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-4-1
结帖率:0
已结贴  问题点数:20 回复次数:5 
设单链表中存放着n个字符,设计算法,判断该字符串中是否有中心对称关系
设单链表中存放着n个字符,设计算法,判断该字符串中是否有中心对称关系
搜索更多相关主题的帖子: 中心对称 字符串 
2015-04-01 15:37
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
得分:5 
作业?
2015-04-01 15:47
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:5 
回复 楼主 宸夜
重新修正了一下 加了空行检测 让代码更健壮些

程序代码:
#include <stdio.h>
#include <stdlib.h>
#define SIZE (sizeof(ND))

typedef struct node {
    char ch;
    struct node *next;
} ND, *PN;

void createList(PN head) {
    PN cur = head, pnew = NULL;
    char c = getchar();

    if(c == '\n') {
        free(head);
        exit(EXIT_FAILURE);

    } else  head->ch = c;

    while((c = getchar()) != '\n') {
        pnew = malloc(SIZE);
        if(pnew == NULL) exit(EXIT_FAILURE);
        pnew->ch = c;
        cur->next = pnew;
        cur = cur->next;
    }
    
    cur->next = NULL;
}

void freeList(PN head) {
    PN p;

    while(head != NULL) {
        p = head->next;
        free(head);
        head = p;
    }
}

int main(void) {
    PN cur = NULL, pnew = NULL, rhead = NULL, rcur = NULL;
    PN head = malloc(SIZE);

    if(head) createList(head);

    else exit(EXIT_FAILURE);

    for(cur = head; cur; cur = cur->next) {
        pnew = malloc(SIZE);

        if(pnew == NULL) exit(EXIT_FAILURE);

        pnew->ch = cur->ch;
        pnew->next = rhead;
        rhead = pnew;
    }

    for(cur = head, rcur = rhead; cur; cur = cur->next, rcur = rcur->next) {
        if(cur->ch != rcur->ch) {
            puts("No!");
            break;
        }
    }

    if(!cur) puts("Yes!");

    freeList(head);
    freeList(rhead);
    return 0;
}


[ 本帖最后由 longwu9t 于 2015-4-1 20:12 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2015-04-01 19:22
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
得分:5 
回文数?
我觉得用两个指针,p1指向字符串头,p2指向字符串尾,逐个比较p1、p2指向的内容,p1++、p2--,p1大于p2时停止比较,说明是回文数。大概思路就这样。
2015-04-01 20:09
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
得分:0 
回复 4楼 xzlxzlxzl
楼主要求用“单链表”

Only the Code Tells the Truth             K.I.S.S
2015-04-01 20:16
jklqwe111
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:35
帖 子:335
专家分:1125
注 册:2014-4-13
得分:5 
回复 楼主 宸夜
1 遍历链表,得节点数n
2遍历1---n/2或(n/2+1)(奇偶不同),用头插法新建链表,所得是一个与原来反序的链表
3同时遍历比较新链表和原链表n节点后续,得出结果。
这题主要是应用链表的遍历,以及头插法的反序特点。
2015-04-01 22:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443377-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.523773 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved