算法刷题-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 }

运行结果:

猜你喜欢

转载自www.cnblogs.com/gilgamesh-hjb/p/11846155.html
今日推荐