リストを削除するときに問題があります(メモリを解放してください)。 シークエンスの場合、コードはリストのショートカットです。 シーケンス=同じ番号、それから3つの数字は等しい。 と私はシーケンスにc:無料機能
例見つけた後、新しい長さを返します。
Before: 3,3,3,3,2
After: -4,3,2
New length : 3
を私が書くコードは、良い結果を与えるが、私はDelete_List
機能プログラムがクラッシュを使用する場合。
node *Find_Sequence(node *L) {
node *headSeq = NULL, *tailSeq = NULL, *currL = L;
int flag = 0, cnt = 3;
while (currL != NULL) {
if (currL->next != NULL && currL->data == currL->next->data) {
if (currL->next->data == currL->next->next->data) {
flag = 1; // if flag = 1 it means that have a sequence,
// sequence: same number up and equal to 3.
headSeq = currL;
tailSeq = currL->next->next;
break;
}
}
currL = currL->next;
}
while (tailSeq != NULL) { // to find if hace more then 3 in the sequence and to know how many nodes to delete
if (tailSeq->next != NULL && tailSeq->data == tailSeq->next->data)
cnt++;
else {
//tailSeq->next = NULL;
break;
}
tailSeq = tailSeq->next;
}
if (headSeq != NULL) {
headSeq = Delete_Node(headSeq, tailSeq, cnt - 2); // cnt-2 because i want to stay a place for the head(-k) and for the tail (x)
headSeq->data = -1 * cnt;
if (headSeq != NULL)
headSeq = tailSeq;
}
return L;
}
node *Delete_Node(node *head, node *tail, int length) {
node *h = head, *t = tail, *curr = head, *temp = NULL;
int i;
for (i = 0; i < length; i++) {
temp = h;
h = h->next;
free(temp);
}
if (head != NULL)
head->next = tail;
return head;
}
int new_length(node *L) {
node *new_list = Find_Sequence(L);
int counter = 0;
while (new_list != NULL) {
counter++;
new_list = new_list->next;
}
return counter;
}
node *Delete_List(node *L) {
node *next;
while (L != NULL) {
next = L;
L = L->next;
free(next);
}
return L;
}
int main() {
node *list1 = NULLL; // empty lists
int len;
list1 = Creat_List(list1, 3);
list1 = Creat_List(list1, 3);
list1 = Creat_List(list1, 3);
list1 = Creat_List(list1, 5);
list1 = Creat_List(list1, 4);
printf("Before:");
Print_List(list1);
len = new_length(list1);
printf("The new length is: %d\n", len);
printf("After:");
Print_List(list1);
printf("\n");
Delete_List(list1);
}
"私は問題を抱えています"。その問題が何であるか正確に教えてください。プログラムはクラッシュしますか?正しい結果が得られないのでしょうか? – kaylum
プログラムがクラッシュし、良い結果が得られます@kaylum – edenv3
デバッガを使用します。ここで助けが必要な場合は[mcve]を提供してください。つまり、コードを問題を再現するのに必要な最小限の線に減らします。あなたはそれを行う過程で自分自身で問題を見つけるかもしれません。 – kaylum