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
}
如果看不懂代码可以问我