c_cpp 给定一个链接的线段列表,删除中间点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给定一个链接的线段列表,删除中间点相关的知识,希望对你有一定的参考价值。
//https://www.geeksforgeeks.org/given-linked-list-line-segments-remove-middle-points/
#include <iostream>
#include <list>
using namespace std;
struct linked_list {
int x,y;
struct linked_list *next;
};
typedef struct linked_list node;
void print (node *n) {
while (n) {
cout<< "("<<n->x << "," << n->y << ")"<< "->";
n=n->next;
}
cout<< "NULL";
}
void insert (node **headref, int n, int m) {
node *temp= (node*)malloc(sizeof(node));
temp->x=n;
temp->y=m;
temp->next=NULL;
if (*headref==NULL) {
*headref=temp;
return;
}
node *last=*headref;
while (last->next)
last=last->next;
last->next=temp;
return;
}
void RemoveMiddle (node **headref) {
if (*headref==NULL || (*headref)->next==NULL || (*headref)->next->next==NULL)
return;
node *next=(*headref)->next, *next2= next->next;
if ((*headref)->x==next->x) {
while (next2!=NULL && next->x == next2->x) {
free(next);
next=next2;
next2=next2->next;
}
(*headref)->next=next;
}
else if ((*headref)->y==next->y) {
while (next2!=NULL && next->y == next2->y) {
free(next);
next=next2;
next2=next2->next;
}
(*headref)->next=next;
}
else
return;
RemoveMiddle(&((*headref)->next));
return;
}
int main() {
int n,m;
node *head=NULL;
while (true) {
cout<< "Enter x & y: ";
cin>>n>>m;
if (n==-9 && m==-9)
break;
else
insert (&head,n,m);
}
print(head);
RemoveMiddle(&head);
cout<< "\n";
print(head);
}
以上是关于c_cpp 给定一个链接的线段列表,删除中间点的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 给定已排序的链接列表,删除所有具有重复数字的节点,只留下原始列表中的不同数字。
c_cpp 将最后一个元素移动到给定链接列表的前面
c_cpp 以给定大小的组反转链接列表设置2
c_cpp 以给定大小的组反转链接列表设置1
c_cpp 删除链接列表的备用节点
c_cpp 203.删除链接列表元素