(c語言實現)刪除有序連結串列中重複出現的元素
題目要求:
給出一個升序排序的連結串列,刪除連結串列中的所有重複出現的元素,只保留原連結串列中只出現一次的元素。
例如:
給出的連結串列為1→2→3→3→4→4→5, 返回1→2→5.
給出的連結串列為1→1→1→2→3, 返回2→3.
思路:
程式碼:
#include<stdio.h>
#include<stdlib.h>
typedef struct ListNode{
int data;
struct ListNode *next;
}list;
list *creatlist()
{//建立連結串列
list *head,*current,*now;
now = (list*)malloc(sizeof(list));
scanf("%d",&now->data);
if (now->data == -1)
{
return NULL;
}
head = current = now;
while (current->data != -1)
{
now = (list*)malloc(sizeof(list));
scanf("%d",&now->data);
if (now->data == -1)
{
current->next = NULL;
break;
}
else
{
current->next = now;
current = current->next;
}
}
return head;
}
void printlist(list *head)
{//列印連結串列
list *p = head;
while (p)
{
printf("%d ",p->data);
p = p->next;
}
}
list *deletelist(list *head)
{
list *pre = NULL,*curr = head,*next;
if(head == NULL || head->next == NULL)//頭結點為空或者連結串列只有一個數
return head;
while (curr)
{
next = curr->next;
if ((next != NULL) && (curr->data == next->data))
{
//重複節點是鏈中節點
int x = curr->data;
list* temp = curr;
while ((temp != NULL) && (temp->data == x))
{
next = temp->next;
temp = next;
}
if (pre == NULL) //說明頭節點已被刪除
head = next;
else //頭節點未被刪除,令pre指向next,使連結串列保持連線
pre->next = next;
curr = next;
}
else {
pre = curr;
curr = next;
}
}
return head;
}
int main(void)
{
list *head,*head_2;
head = creatlist();
head_2 = deletelist(head);
printlist(head_2);
}
相關文章
- 0928面試小節:刪除有序連結串列中的重複元素面試
- 資料結構實驗之連結串列七:單連結串列中重複元素的刪除資料結構
- 力扣-83. 刪除排序連結串列中的重複元素力扣排序
- 83. 刪除排序連結串列中的重複元素(JavaScript版)排序JavaScript
- leetcode-82:刪除排序連結串列中重複的元素-iiLeetCode排序
- c語言單連結串列的實現,包括連結串列的建立、插入、查詢、刪除、列印、長度計算C語言
- JZ-056-刪除連結串列中重複的結點
- 從未排序的連結串列中刪除重複項排序
- 牛客網高頻演算法題系列-BM15-刪除有序連結串列中重複的元素-I演算法
- 牛客(刪除連結串列中重複節點)
- 資料結構__連結串列_單連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- JZ76 刪除連結串列中重複的節點
- c#刪除有序陣列中的重複項C#陣列
- 劍指offer-----刪除連結串列中的重複節點
- “c語言+結構體+連結串列”實現名片系統C語言結構體
- 用c語言實現資料結構——單連結串列C語言資料結構
- 資料結構——單連結串列介面實現(C語言)資料結構C語言
- c語言單向連結串列逆轉實現方法C語言
- 資料結構_連結串列_單向迴圈連結串列 & 雙向連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 資料結構_連結串列_雙向迴圈連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 資料結構_連結串列_單向迴圈連結串列的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 讓我們一起啃演算法----刪除排序連結串列中的重複元素演算法排序
- C語言實現帶表頭結點單連結串列的初始化、查詢、插入、刪除、輸出、撤銷等操作C語言
- 資料結構_連結串列_雙向迴圈連結串列 & 棧 的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 讓我們一起啃演算法----刪除排序連結串列中的重複元素 II演算法排序
- C語言單向連結串列的增刪操作C語言
- 刪除有序陣列中的重複項 II陣列
- C語言實現雙連結串列的(終端)新增和查詢C語言
- C\C++之用結構體實現連結串列的建立、遍歷、結點插入、結點刪除C++結構體
- Java兩種方式實現連結串列的刪除,返回頭結點Java
- 資料結構_連結串列的原理與應用1_單連結串列(基於C語言實現)資料結構C語言
- 0026-刪除有序陣列中的重複項陣列
- 環形連結串列_相交連結串列_多數元素(java語言)Java
- 【資料結構】用C語言實現單連結串列及其常見操作資料結構C語言
- ES6刪除字串中重複的元素字串
- C語言資料結構:雙向連結串列的增刪操作C語言資料結構
- 【演算法-初級-陣列】刪除排序陣列中的重複項(多語言版實現)演算法陣列排序
- C語言線性連結串列C語言