判斷一條單向鍊錶是不是 回文

2021-06-26 20:06:23 字數 2474 閱讀 3518

題目:

判斷一條單向鍊錶是不是"回文"

思路一:採用快慢指標,慢指標入棧,當快指標為null時,出棧和慢指標比較即可。時間複雜度o(n),空間複雜度o(n)。

優點:比較好實現,且沒有修改鍊錶

缺點:需要分配記憶體

#include #include #include typedef int elem;

typedef struct node

lnode, *linklist;

/*採用快慢指標方式,將慢指標的結點新增到棧中

當快指標到null時,將慢指標的結點與快指標比較即可*/

bool ispalindromelist(linklist list)

else

}/*如果是奇結點,出棧乙個*/

if (flag)

/*慢指標和棧直接比較*/

while (slow!=null && !s.empty())

slow = slow->next;

s.pop();

}return true;

}/*採用尾插法,建立單鏈表*/

void createlist(linklist list, elem data)

newnode = (lnode*)malloc(sizeof(lnode));

newnode->next = null;

newnode->data = data;

p->next = newnode;

}/*列印單鏈表*/

void printlist(linklist list, void(*print)(elem))

printf("\n");

}/*列印結點值*/

void printelem(elem data)

int main()

; int i;

list = (linklist)malloc(sizeof(lnode));

list->next = null;

list->data = 0;

for (i=0; i<6; i++)

printlist(list, printelem);

if (ispalindromelist(list))

else

return 0;

}

思路二:採用快慢指標,當快指標為null時,翻轉慢指標。比較前半部分鍊錶和翻轉鍊錶即可。時間複雜度o(n),空間複雜度o(1)。

優點:節約空間

缺點:改變了鍊錶的值

#include #include #include typedef int elem;

typedef struct node

lnode, *linklist;

lnode* reverselink(lnode* begin, lnode* end)

p->next = pre;

pre = p;

p = q;

}return head;

}/*採用快慢指標方式,當到中間時逆轉後半部分指標

挨個比較,如果滿足相同則返回true*/

bool ispalindromelist(linklist list)

}/*獲取翻轉過後的頭結點*/

head = reverselink(slow, null);

while (p!=null && head!=null)

p = p->next;

head = head->next;

}return true;

}/*採用尾插法,建立單鏈表*/

void createlist(linklist list, elem data)

newnode = (lnode*)malloc(sizeof(lnode));

newnode->next = null;

newnode->data = data;

p->next = newnode;

}/*列印單鏈表*/

void printlist(linklist list, void(*print)(elem))

printf("\n");

}/*列印結點值*/

void printelem(elem data)

/*test*/

int main()

; int i;

list = (linklist)malloc(sizeof(lnode));

list->next = null;

list->data = 0;

for (i=0; i<6; i++)

printlist(list, printelem);

if (ispalindromelist(list))

else

return 0;

}

判斷鍊錶是不是回文數

主要思想,先找到中間結點,對後半段鍊錶反轉,然後一一對比資料,看看是不是相同,相同就是回文鍊錶,不同就不是 import sys 引用當前資料夾下的single linked list from singly linked list import singlylinkedlist def rever...

leetcode 234 判斷是不是回文鍊錶

聰明的我想到了利用棧先進後出的特性,求出鍊錶的長度之後前一半入棧,後一半出棧的方法,雖然簡單易懂,但是效率有點低,貼 definition for singly linked list.struct listnode listnode int x val x next nullptr listnod...

判斷是不是回文鍊錶的方法 3種

struct treelist treelist int a 使用棧來做,這是最簡單的方法,空間複雜度為o n bool isre 1 treelist p while p return true 使用快慢指標尋找中點,能夠比普通的暴力解法省一半的空間 bool isre 2 treelist p ...