数据结构—2208: 交换节点(线性表)

来源:互联网 发布:类似maka软件 编辑:程序博客网 时间:2024/05/22 13:50

2208: 交换节点(线性表)

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 34  Solved: 27
[Submit][Status][Web Board]

Description

(线性表)编写一个算法来交换单链表中指针P所指结点与其后继结点,HEAD是该链表的头指针,P指向该链表中某一结点。

Input

输入链表长度:6

输入链表:1 2 3 4 5 6

输入p指向的节点:5

Output

1 2 3 4 6 5

Sample Input

57 6 9 8 23

Sample Output

7 6 8 9 2 
#include <stdio.h>#include <stdlib.h>#include<malloc.h>int a[100];typedef int ElemType;typedef struct LNode{    ElemType data;    struct LNode *next;} LinkList;void IintList(LinkList *L){    L=(LinkList *)malloc(sizeof(LinkList));    L->next=NULL;}void CreatList(LinkList *L,ElemType a[],int n){    LinkList *s,*r;    int i;    r=L;    for(i=0; i<n; i++)    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=a[i];        r->next=s;        r=s;    }    r->next=NULL;}void exchangelist(LinkList *L,int k){    LinkList *p=L,*q,*back;    int i=0;    while(i<k&&p->next!=NULL)    {        p=p->next;        i++;    }    q=p->next;    if(q!=NULL)    {       if(p==L)       {           p->next=q->next;           q->next=p;           L=q;       }       else       {           back=L;           while(back->next!=p)            back=back->next;           back->next=q;           p->next=q->next;           q->next=p;       }    }}void DispList(LinkList *L){    LinkList *p=L->next;    while(p!=NULL)    {        printf("%d ",p->data);        p=p->next;    }}int main(){    LinkList L;    int n,i,k;    scanf("%d",&n);    for(i=0; i<n; i++)        scanf("%d",&a[i]);    scanf("%d",&k);    IintList(&L);    CreatList(&L,a,n);    exchangelist(&L,k);    DispList(&L);    return 0;}


0 0
原创粉丝点击