(C语言)(线性表)已知一双向循还链表,从第二个结点至表尾递增有序,(设a1<x<an)。试编写程序,将第一个结点删除并插入表中适当位置,使整个链表递增有序。
输入
输入长度n:7
输入数据:4 1 2 3 6 8 9
输出
1 2 3 4 6 8 9
样例输入
5
11 7 8 9 10
样例输出
7 8 9 10 11
该回答引用ChatGPT
#include <stdio.h>
// 删除线性表中所有值为item的数据元素
int delete_item(int A[], int n, int item){
int i = 0, j = 0;
while (i < n) {
if (A[i] != item) {
A[j++] = A[i++];
} else {
i++;
}
}
return j;
}
int main() {
int n, item;
scanf("%d", &n);
int A[n];
for (int i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
scanf("%d", &item);
int new_length = delete_item(A, n, item);
for (int i = 0; i < new_length; i++) {
printf("%d ", A[i]);
}
return 0;
}
输入样例:
10
1 2 3 4 5 6 7 8 9 10
8
输出样例:
1 2 3 4 5 6 7 9 10
#include <stdio.h>
typedef struct _Sqlist
{
int data[100];
int len;
}Sqlist;
void DeleteData(Sqlist sq,int n)
{
int i=0,j=0;
for(i=0;i<sq.len;i++)
{
if(sq.data[i] != n)
sq.data[j++] = sq.data[i];
}
sq.len = j;
}
void print(Sqlist sq)
{
for(int i=0;i<sq.len;i++)
printf("%d ",sq.data[i]);
}
int main()
{
Sqlist sq;
printf("输入顺序表元素数量:");
scanf("%d",&sq.len);
printf("输入顺序表元素值:");
for(int i=0;i<n;i++)
scanf("%d",&sq.data[i]);
int n;
printf("输入要删除的元素值:");
scanf("%d",&n);
DeleteData(sq,n);
printf("删除后结果为:");
print(sq);
return 0;
}
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeElements(struct ListNode* head, int val){
//结束标志放在最前面
if(head == NULL){
return NULL;
}
head->next = removeElements(head->next,val);//调用,处理下一个结点
if(head->val == val){ //遇到val,返回下一个结点
return head->next;
}else{ //遇到非val,返回自身
return head;
}
}
不知道你这个问题是否已经解决, 如果还没有解决的话:通过对一维数组的输入输出来实现;逆序输出,可以通过输出时,在for语句中利用循环变量递减的方法来实现
#include "stdio.h"
void main(){
int i,a[10];
/* 定义循环变量i和一维数组a */
for (i=0;i<=9;i++)
scanf("%d",&a[i]);
for (i=0;i<=9;i++)
printf("%d ",a[i]);
/* 按照逆序输出 */
printf("\n");
}
运行截图: