C語言 刪除鍊錶中的重複節點(一)

2021-10-01 11:49:11 字數 1173 閱讀 4351

假設要將重複的節點刪除至只剩乙個。

思路:設定兩個指標,乙個先指向頭節點(假設為pointer指標),乙個指向頭節點的next(假設為s指標)。

比較pointer和s的val:

pointer->val 等於 s->val:

判斷s的next是否為空:

a. s的next不為空

用s->next的val覆蓋s的val,然後刪除s->next

b. s的next為空(即s是尾節點)

新建節點node,遍歷鍊錶,使node指向s的前節點,然後刪除s節點。

注意:如果不設定node節點,直接用free(s)則無法徹底刪除s節點。

pointer->val 不等於 s->val:

s指標右移

當迴圈至s為null,令pointer右移,重複上述過程直至pointer為null。

**:

#include

#include

typedef

struct linknode

linknode;

//建立節點

linknode*

create_link

(int val)

//連線節點

void

connection_linknode

(linknode* node1, linknode* node2)

//輸出單鏈表

void

print_link

(linknode* head)

printf

("\n");

}void

deleteduplication

(linknode* head)

else

}else

s = s->next;

} pointer = pointer->next;}}

intmain

(void

)

執行結果:

其實這道題目與在o(1)時間內刪除鍊錶節點非常相似,只是待刪除節點不是直接給出,而是要通過指標在鍊錶內尋找,且待刪除元素可能不止乙個。

鍊錶 刪除鍊錶中重複的節點

刪除鍊錶中重複的節點 方法一 採用遞迴的方法,但這種方法在鍊錶無重複節點時效率不高 function deleteduplication phead if phead.val phead.next.val return deleteduplication node 採用遞迴的方法從下乙個不重複的點開...

鍊錶 刪除鍊錶中重複的節點

刪除鍊錶中重複的節點 方法一 採用遞迴的方法,但這種方法在鍊錶無重複節點時效率不高 function deleteduplication phead if phead.val phead.next.val return deleteduplication node 採用遞迴的方法從下乙個不重複的點開...

刪除鍊錶中重複的節點

題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 這個題目首先考慮到頭結點也可能是重複的節點,所以需要設定乙個頭結點之前的節點。之後需要3個指標 pre,cur和next struct...