删除链表第index个结点

    技术2022-07-14  83

    删除链表第index个结点

    问题描述: 输入若干(不超过100个)非负整数,创建一个不带头结点的单向链表。在输入一个位置index,从链表中删除第index个结点,输出结果链表。

    输入说明: 首先输入若干非负整数,每个整数作为数据放入一个链表结点中,输入-1表示输入结束。 然后输入若干组整数,每组一行,每行仅包含一个整数,表示需要删除的结点的位置index。如:输入1表示删除链表的第一个(最前面一个)结点。

    输出说明: 对于每组输入,输出删除第index个结点之后的结果链表。输出的信息以head开头,以tail结尾,以“–>”分隔。具体见输出范例。 如果输入的index超出了链表的范围,则不删除,输出原链表。如果是空链表,则直接输出“head–>tail”。

    输入范例: 1000 2342 8883 -1 4 3 1 1

    输出范例: head–>1000–>2342–>8883–>tail head–>1000–>2342–>tail head–>2342–>tail head–>tail

    #include<iostream> using namespace std; struct ListNode{ int num; struct ListNode *next; }; ListNode *createByTail(){ ListNode *head=new ListNode; ListNode *p,*p1; p=head; head->next=NULL; int n; cin>>n; while(n!=-1){ p1=new ListNode; p1->num=n; p->next=p1; p=p1; cin>>n; } p->next=NULL; return head; } ListNode *deleteNode(ListNode *head,int index){ int n=1; ListNode *pre=head,*p=head->next; while(n!=index){ pre=p; p=p->next; n++; } pre->next=p->next; delete p; return head; } void displayListNode(ListNode *head){ ListNode *p; p=head->next; cout<<"head-->"; while(p!=NULL){ cout<<p->num; cout<<"-->"; p=p->next; } cout<<"tail"<<endl; } int length(ListNode *head){ int n=0; ListNode *p=head->next; while(p){ n++; p=p->next; } return n; } int main(){ ListNode *head=createByTail(); int index; while(cin>>index){ int len=length(head); if(index>len||index<=0){ displayListNode(head); }else{ head=deleteNode(head,index); displayListNode(head); } } return 0; }
    Processed: 0.009, SQL: 9