C语言单链表

Python012

C语言单链表,第1张

C语言创建单链表如下:

#include"stdio.h"

#include"stdlib.h"

#include"malloc.h"

#include "iostream.h"

typedef struct node

{

int  data

node * next

}node , * List

void create(int n)

{

int c

List s,L

L=(List)malloc(sizeof(node))

L->next=NULL

printf("请输入第1个数据:")

scanf("%d",&c)

L->data=c

for(int i=2i<=ni++)

{

s=(List)malloc(sizeof(node))

printf("请输入第%d个数据:",i)

scanf("%d",&c)

s->data=c

s->next=L

L->next =s

}

printf("链表创建成功!")

}

void main()

{

int n

printf("请你输入链表的个数:")

scanf("%d",&n)

create(n)

}

运行结果如下:

完整代码如下:

#include<stdio.h>

#include<stdlib.h>

typedef struct LNode

{

char data

LNode *next

}* LNodePtr

LNodePtr CreateList()

{

//初始化头节点

LNodePtr head = (LNodePtr)malloc(sizeof(LNode))

head->data = 0

head->next = NULL

LNodePtr tNode//临时节点

char data

while(true)

{

scanf("%c",&data)

if(data == '\0' || data == '\n' || data == '\r' || data == '\t')

{

continue

}

if(data == '!')//输入感叹号停止插入节点

{

printf("输入链表元素结束。\n")

break

}

if(data >= 'A' &&data <= 'Z')

{

tNode = (LNodePtr)malloc(sizeof(LNode))

tNode->data = data    /*  数据域赋值  */

tNode->next = head->next

head->next = tNode

}

else

{

printf("输入字符需为大写字母。\n")

}

}

return head

}

/**

加密函数,加密的方式为链接head的所有节点前移offset位,但是不支持offset比链表的节点数多

@param head 链表头节点

@param offset 节点前移的位数

*/

void EncryptList(LNodePtr head,int offset)

{

LNodePtr tNode = head->next

int i

for(i = 0i <offseti++)

{

if(tNode->next != NULL)

{

tNode = tNode->next

}

}

if(i == offset)

{

LNodePtr newHead = tNode

LNodePtr tail = tNode

while (tail->next != NULL)

{

tail = tail->next

}

tail->next = head->next

while(tNode->next != NULL)

{

if(tNode->next != newHead)

{

tNode = tNode->next

}

else

{

tNode->next = NULL

break

}

}

head->next = newHead

}

else

{

printf("不支持移动")

}

}

void ListPrint(LNodePtr head)

{

if(head->next != NULL)

{

LNodePtr tNode = head->next

while (tNode->next != NULL)

{

printf("%c ",tNode->data)

tNode = tNode->next

}

printf("%c",tNode->data)

}

}

int main()

{

LNodePtr list = CreateList()

printf("\n创建的链表如下:\n")

ListPrint(list)

EncryptList(list,3)

printf("\n所有节点前移了3位之后的链表如下:\n")

ListPrint(list)

printf("\n")

return 0

}

如果看不懂代码可以问我