首页 > 程序开发 > 【C】字符串和链表元素的反转

【C】字符串和链表元素的反转

2012年2月12日 发表评论 阅读评论

比较简单的C语言笔试题,自己写了一下,记录

字符串反转

#include <stdio.h>

char *reverse(char *str)
{
     int len = strlen(str);
     int steps = len / 2;
     int i, j;
     for(i=0; i< steps; i++)
     {
         j = len - 1 - i;
         str[i] = str[j] ^ str[i];
         str[j] = str[j] ^ str[i];
         str[i] = str[j] ^ str[i];
     }
     return str;
}

int main(int argc, char *argv[])
{
    char s[] = "abcdef!";
    printf("%s\n", s);
    reverse(s);
    printf("%s\n", s);

    return 0;
}

链表元素反转

#include <stdio.h>

typedef struct node
{
    struct node *next;
    int val;
} Node;

Node *create(int n)
{
    Node *head = NULL, *p = NULL, *cur=NULL;
    while(n--)
    {
        p = (Node*)malloc(sizeof(Node));
        p->val = n;
        p->next = NULL;
        if (head == NULL)
        {
            cur = head = p;
        }
        else
        {
            cur->next = p;
            cur = p;
        }
    }
    return head;
}

void print(Node *head)
{
    Node *p = head;
    while(p != NULL)
    {
        printf("%d ", p->val);
        p = p->next;
    }
    printf("\n");
}

Node *reverse(Node *head)
{
    Node *cur, *q, *p = head;
    if (p == NULL || p->next  == NULL)
    {
        return p;
    }
    else
    {
        q = p->next;
        cur = reverse(p->next);
        q->next = p;
        p->next = NULL;
        return cur;
    }
}

int main(int argc, char *argv[])
{
    Node *head = create(10);
    print(head);
    head = reverse(head);
    print(head);
    return 0;
}

P.S.

  1. 判断链表是否有环及两链表是否相交
  2. 逆序数/逆序数对

枫芸志原创文章,转载请注明来源并保留原文链接

本文链接:http://witmax.cn/c-string-and-linked-list-reversal.html


分类: 程序开发 标签: 664次阅读
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
订阅评论
  欢迎参与讨论,请在这里发表您的看法、交流您的观点。

无觅相关文章插件,快速提升流量