題目:
判斷一條單向鍊錶是不是"回文"
思路一:採用快慢指標,慢指標入棧,當快指標為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 ...