算法刷题-1-单链表操作

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 //练习单链表操作:给出单链表 head 和 n,要求删除单链表倒数第n个结点,并连接剩余结点
 5 //例子:1-2-3-4-5,n=2,删除后应该是:1-2-3-5
 6 typedef struct ListNode{
 7     int data;
 8     ListNode *next;
 9 }ListNode;
10
11 int createList(ListNode *&head,int a[],int len)
12 {
13     head=(ListNode*)malloc(sizeof(ListNode));
14     head->next=NULL;
15     ListNode *p,*q;
16     q=head;
17     for(int i=0;i<len;i++)
18     {
19         p=(ListNode*)malloc(sizeof(ListNode));
20         p->data=a[i];
21         p->next=NULL;
22         q->next=p;
23         q=q->next;
24     }
25
26 }
27 void print(ListNode *p)
28 {
29     p=p->next;
30     while(p)
31     {
32         printf("%d\n", p->data);
33         p=p->next;
34     }
35 }
36 void f(ListNode*head,int n)
37 {
38     ListNode *p,*q;
39     p=q=head->next;//头节点不存储数据,从头结点的下一个开始
40     int cnt=0;
41     while(cnt<n)
42     {
43         p=p->next;
44         cnt++;
45     }
46     while(p->next)//继续往下走
47     {
48         p=p->next;
49         q=q->next;
50     }
51     q->next=q->next->next;
52 }
53 int main(int argc, char const *argv[])
54 {
55     int a[]={1,2,3,4,5};
56     ListNode *head;
57     int len=sizeof(a)/sizeof(int);
58     createList(head,a,len);
59     print(head);//单链表建立后打印它
60     f(head,2);//删除倒数第二个结点
61     printf("\n");
62     print(head);//打印处理后的单链表
63     return 0;
64 }

运行结果:

原文地址:https://www.cnblogs.com/gilgamesh-hjb/p/11846155.html

时间: 2024-10-08 20:15:42

算法刷题-1-单链表操作的相关文章

10、单链表操作

单链表操作 单链表操作1 /*单链表的类型定义*/ typedef int DataType; typedef struct node { DataType data; struct node * next; }LinkNode, *LinkList; /*单链表的定位运算*/ LinkNode *Locate(LinkNode *L, int k)//????为什么此处是LinkNode *Locate()类型,表示什么意思 { LinkNode *p; int i; i= 1; p = L-

数据结构上机测试2-1:单链表操作A (顺序建表+关键字删除)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

单链表操作

#include<stdio.h>#include<malloc.h> typedef struct Node{ int data; struct Node *next;}LinkList; //就地反转int LinkListRerverse(LinkList *head){ LinkList *q,*p; p = head->next; head->next = NULL; while(p != NULL){ q = p->next; p->next =

单链表操作系列

#include<stdio.h> #include<stdlib.h> typedef int ElemType; //定义结点类型 typedef struct Node { ElemType data; struct Node *next; }LNode,*LinkList; //单链表的建立1,头插法建立单链表,逆序生成 LinkList LinkListCreateH() { LinkList L,p; L = (LinkList)malloc(sizeof(LNode)

数据结构之 线性表---单链表操作A (删除链表中的指定元素)

数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除.分别输出建立的初始单链表和完成删除后的单链表. 输入 第一行输入数据个数n: 第二行依次输入n个整数: 第三行输入欲删除数据m. 输出 第一行输出原始单链表的长度: 第二行依次输出原始单链表的数据: 第三行输出完成删除后的单链表长度: 第四行依次输出完成删除后的

循环单链表操作(转)

循环单链表的初始化,建立,插入,查找,删除. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 //////////////////////////////////////////////// //循环单链表的初始化,建立,插入,查找,删除.// //Autho

单链表操作实例程序

#include <iostream> #include <iomanip> using namespace std; typedef struct node { int val; node *next; }node; node * create_list(); void traverse_list(node *pHead); int get_len_list(node *pHead); bool delete_list(node *pHead,int pos,int &v

常见算法题:单链表二路归并

题目:现有两个递增的单链表L1和L2,设计一个算法将L1与L2的所有结点归并到递增的单链表L3中.要求:空间复杂度为O(1). 思路:本题可采用二路归并思路,但题目要求空间复杂度为O(1),因此不能复制结点,只能破坏L1和L2将结点插入到L3中. 代码: void Merge(LinkList &L1,LinkList &L2,LinkList &L3) { LinkList *p=L1.head->next, *q=L2.head->next; LinkList *p

菜鸟的算法入门:java的链表操作

从C语言的指针开始,我的算法之路就结束了! 今天为了找个好的实习,不得不捡起来,写了三年的web,算法落下了太多了 今天在leetcode上刷题,难在了一个简单的链表上,因此记录一下 题目:给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因