[c++]删除单向链表重复节点

题目要求

删除单向链表中的重复结点,如果链表中存在重复结点
(除next指针外的其它数据成员的值相同)时,保留离链首最近的结点。
该链表中固定只有8个元素, 输入是八个整数。

注意看链表的创建函数

Node * createList(int a[], int len)
{
        Node *head = NULL;
        if(len<1)
                return head;
        for(int i=0;i<len;i++)
        {
                Node *tmp = new Node;
                tmp->num = a[i];
                tmp->next = head;
                head = tmp;
        }
        return head;
}

输入输出样例:1组

#1
样例输入:
2 6 4 2 7 9 5 12 
样例输出:
12 5 9 7 2 4 6

代码示例

#include <iostream>
#include <stdlib.h>
using namespace std;

struct Node{
	int num;
	Node* next;
}; 
Node * createList(int a[], int len)
{
        Node *head = NULL;
        if(len<1)
                return head;
        for(int i=0;i<len;i++)
        {
                Node *tmp = new Node;
                tmp->num = a[i];
                tmp->next = head;
                head = tmp;
        }
        return head;
}
void print(Node* addr){
	for (Node* pi=addr;pi!=NULL;pi=pi->next){
		cout<<pi->num<<" ";
	}
	
}
Node* del(Node* head){
    Node *p,*q,*r;
    p = head; 
    while(p != NULL)    
    {
        q = p;
        while(q->next != NULL) 
        {
            if(q->next->num == p->num)
            {
                r = q->next; 
                q->next = r->next;  
                free(r);
            }
            else
                q = q->next;
        }

        p = p->next;
    }

    return head;
}
int main()
{
	int a[8];
	for(int i=0;i<8;i++){
		cin>>a[i];
	}
	Node* h=createList(a,8);
	del(h);
  	print(h);
    
	
	return 0;
}

版权声明:本文为qq_37301470原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。